本文原刊於 Rails Designer
在上一篇文章中,我探索了一種在使用 Stimulus 上傳之前預覽圖像的方法。
我知道想要透過添加拖放來擴展其功能。在此過程中,我還使用 Stimulus 插座將這兩種功能結合在一起。展示小型 Stimulus 控制器的更高級用法。
我假設您已經完成了前面提到的文章的所有步驟。
讓我們從 HTML 開始。它使用其他 HTML,僅添加了一些屬性。
讓我們建立dropzone_controller.js.
import { Controller } from "@hotwired/stimulus"; export default class extends Controller { static targets = ["input"]; dragOver(event) { event.preventDefault(); } dragLeave(event) { event.preventDefault(); } drop(event) { event.preventDefault(); this.#updateInputField(event.dataTransfer.files[0]); } }
所有這些方法所做的都是在呼叫這些操作時防止預設事件。 drop() 函數也呼叫私有函數 this.#updateInputField()。我們來添加一下吧。
export default class extends Controller { // … // private #updateInputField(file) { const dataTransfer = new DataTransfer(); dataTransfer.items.add(file); this.inputTarget.files = dataTransfer.files; } // … }
這會將放置的影像注入到 inputTarget 欄位中。就像這樣,您可以將圖像拖放到元素上。 ?
但缺少一個重要的部分......圖像沒有顯示,看起來像一個錯誤。幸運的是 image_preview_controller.js 已經完成。這是一個簡單的練習。
首先透過新增以下屬性來調整 HTML:
額外:
現在 dropzone_controller.js.
中需要兩行
export default class extends Controller { static outlets = ["image-preview"]; // … drop(event) { // … this.imagePreviewOutlet.show(); // … } // … }
現在,當您放置圖像時,它會觸發 image_preview_controller.js 上的 show() 函數。 ?
我喜歡使用像這樣的小型 Stimulus 控制器,它們可以很好地協同工作。
Rails Designer 提供了這款 Stimulus 控制器,並添加了一些額外功能。立即取得副本。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3