Vue元件 輸入

2022-06-05 21:45:09 字數 2790 閱讀 9107

隱式輸入

總結我將輸入分成了兩類,一是:顯式輸入,第二個是:隱式輸入。下面我將分別介紹這兩種分類。

顯式輸入,顧名思義,顯式的傳給元件的資料。

props

總結

"輸入"不僅可以是具體的數值,也可以是乙個事件(emits)的**函式。這個事件即包含了html的原生事件,也包括元件自定義的事件。

總結

$attrs

當向元件傳入乙個未在propsemits中定義的 attribute 的時候,vue會預設把值自動新增到根節點的 attribute 中。如下所示,date元件的節點組成:

//其它內容

我們以如下的方式呼叫:

實際渲染到dom中的date元件為:

//date元件渲染出來的其它dom

如上所示,傳入的class新增到了上。

但,當元件不止有兩個根節點的時候(vue2只允許有乙個根節點,而vue3允許有多個),vue將怎麼處理了?

vue將選擇權交給了你,使用v-bind="$attrs"將值賦其中任意乙個根節點。

如果不想要除propsemits定義以外的任何值了? 配置:inheritattrs: false

如果根節點不想要,而想給子節點了? 使用v-bind="$attrs"將值賦其中任意乙個子節點。

總結$attrs屬於例項屬性,一般用來接收原生html元素的屬性。是否被使用,完全由元件內部決定。

在vue中可借助插槽(slot)來做內容分發,插槽也可以視為元件的一種「輸入」。如下所示,date元件新增到了helloworld元件的default插槽中。

總結

這裡主要是指自定義指令。那為什麼自定義指令會被認為是一種「輸入」了?因為自定義指令可以對元件內的dom元素進行底層操作,影響著元件的狀態。關於元件的更多細節可以檢視對應的官方文件。

總結

顯式輸入總結

下面我來看乙個包含所有顯式輸入的元件使用情況:

進一步觀察,我們可以發現:所有的顯式輸入基本都需要借助指令來實現!($attrs除外)

關於v-model

v-model指令也是元件中常用的輸入源,但其本質是propsemits的語法糖,所以就不算入「輸入」裡面了。

隱式輸入,是指那些除顯式輸入之外所有能影響元件狀態的情況。他並不「顯式」傳入,卻對元件內部起著影響。

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...