隱式輸入
總結我將輸入分成了兩類,一是:顯式輸入,第二個是:隱式輸入。下面我將分別介紹這兩種分類。
顯式輸入,顧名思義,顯式的傳給元件的資料。
props
總結"輸入"不僅可以是具體的數值,也可以是乙個事件(emits)的**函式。這個事件即包含了html
的原生事件,也包括元件自定義的事件。
總結
$attrs
當向元件傳入乙個未在props
或emits
中定義的 attribute 的時候,vue會預設把值自動新增到根節點的 attribute 中。如下所示,date
元件的節點組成:
//其它內容
我們以如下的方式呼叫:
實際渲染到dom中的date元件為:
//date元件渲染出來的其它dom
如上所示,傳入的class
新增到了
上。
但,當元件不止有兩個根節點的時候(vue2只允許有乙個根節點,而vue3允許有多個),vue將怎麼處理了?
vue將選擇權交給了你,使用v-bind="$attrs"
將值賦其中任意乙個根節點。
如果不想要除props
和emits
定義以外的任何值了? 配置:inheritattrs: false
。
如果根節點不想要,而想給子節點了? 使用v-bind="$attrs"
將值賦其中任意乙個子節點。
總結$attrs
屬於例項屬性,一般用來接收原生html
元素的屬性。是否被使用,完全由元件內部決定。
在vue中可借助插槽(slot)來做內容分發,插槽也可以視為元件的一種「輸入」。如下所示,date
元件新增到了helloworld
元件的default
插槽中。
總結
這裡主要是指自定義指令。那為什麼自定義指令會被認為是一種「輸入」了?因為自定義指令可以對元件內的dom元素進行底層操作,影響著元件的狀態。關於元件的更多細節可以檢視對應的官方文件。
總結
顯式輸入總結
下面我來看乙個包含所有顯式輸入的元件使用情況:
進一步觀察,我們可以發現:所有的顯式輸入基本都需要借助指令來實現!($attrs
除外)
關於v-model
v-model
指令也是元件中常用的輸入源,但其本質是props
和emits
的語法糖,所以就不算入「輸入」裡面了。
隱式輸入,是指那些除顯式輸入之外所有能影響元件狀態的情況。他並不「顯式」傳入,卻對元件內部起著影響。
inject
在元件內部通過inject
可以獲取祖輩級傳入的資料,因為不是一眼就能看到的「輸入」,而且還不一定能知道是哪個元件傳入的值,所以注入(inject),我將其歸類為隱式輸入。
總結
mixin
不管是全域性混入(mixin)還是只在元件內混入,它都是一種隱式的不易觀測的傳值和處理方式,所以混入,也被歸為隱式輸入。
總結
extends
對另乙個元件進行擴充套件(extends),與mixin類似。所以擴充套件,也是隱式輸入的一種。
總結
globalproperties
總結隱式輸入總結
隱式輸入一般用於祖孫級間傳值或增加元件的復用性。
最後我們來總結下,「輸入」共有哪些:
隱式輸入:
不當之處,歡迎交流指正
Vue 表情包輸入元件
乙個用於vue的表情輸入元件 emotion資料夾下emotion檔案說明 mounted emotion資料夾下index檔案說明通過迴圈列表生成表情包選擇框 class emotion box line v for line,i in list key i class emotion item ...
Vue 實現驗證碼輸入元件
a 採用自定義指令實現 正如模板 中展示的那樣,為每乙個input繫結了乙個v focus指令 directives 我們傳入乙個boolean值控制當前項是否獲得焦點。而boolean值是由 item 1 currentindex決定,因此我們只需要修改currentindex的值便可以實現自動換...
乙個車牌輸入元件(vue)
乙個簡單的車牌輸入元件 vue 效果圖 取消 primary size small plain click enterword 確認 keyboard province id province v if plateinput.input.dialo isible plateinput.input.t...