vue-property-decorator,@model選項,也就是vue2.2中新增的例項model選項。原來只知道v-model屬性實現雙向繫結,對這個model選項突然不是很理解。所以這裡 重新對v-model和自定義元件的v-model做乙個回顧,加深印象後,再去理解model選項到底是做什麼的,有什麼作用。
"text" v-model=
"message"
>
}<
/p>
v-model只是語法糖,真正的實現形式:
"text"
:value=
"message" @input=
"message = $event.target.value"
>
1.將輸入框的值繫結到message變數上,這只是單向的,改變message的值可以改變input的value,但是改變input的輸入不會改變message。
2.監聽input事件,當輸入類內容時改變message變數,從而實現了雙向繫結。
從官網上看到,v-model在內部為不同的輸入元素使用不同的屬性並丟擲不同的事件:
(1.父級v-model內部已經實現繫結不同的屬性和繫結不同的事件接受子元件觸發的事件,當自己寫@input/@change 時會覆蓋v-model內部的事件)
text和textarea元素使用value屬性和input事件
checkbox和radio使用checked屬性和change事件
select使用value和change事件
// html部分
>
// 4.父元件的value值繫結到price
"price" @input=
"oninput"
>
<
/price-input>
<
/div>
// js部分
vue.
component
('custom-input',}
});new
vue(
, methods:}}
)
通過上面的分析,**預設情況下乙個父元件上的 v-model 會把 value 用作 prop 且把 input 用作 event。**所以當我們在乙個自定義元件上使用v-model並不能實現雙向繫結,因為自定的元件並沒有預設的value和input事件,在使用時,自定義元件中我們需要按照上面那樣顯式的去宣告定義這些東西。這時,model選項就派上用場了,在定義元件的時候,指定prop的值和監聽的事件。
(2.子元件不知道父元件有預設的value和input事件,需要用model聲明顯式告訴子元件。在子元件中用props接收父元件傳過來的,model)
子元件中:
"text"
:value=
"uname" @input=
"updateval($event.target.value)"
>
<
/template>
vue.
component
('my-input'
,,重**
//但是父元件只需要寫 v-model="val" 就代表上面兩個了
props:},
methods:}}
)
父元件內使用時,使用v-model就可以啦
// name是父元件中的屬性
"name" value=
"some value"
>
<
/my-input>
}<
/p>
等價於
'name' @change***=
'val => ' value=
'some value'
>
<
/my-input>
實現雙向繫結的關鍵**就是定義model屬性中的prop和event,v-model中的值傳遞給model屬性中的prop對應的變數。然後在自定義元件中選擇乙個要傳遞出去值的基本元件,通過$emit傳送event事件並傳遞乙個結果值,這樣外部的v-model就收到了傳出的值,因此就實現了雙向傳遞。
匯入自定義模組model
編寫m2.py,指令碼內容如下 usr bin python coding utf 8 its a module test author mm import sys 定義函式ft defft x x int x sum x 3 print sum ft sys.argv 1 直接執行指令碼 m2.p...
自定義元件中的model
handlechange 很好奇沒有找到父元件中定義的change,並且發現自定義元件中有乙個 export default 下面的prop不碼了搜尋了vue 文件才發現是為了避免衝突才這樣設定的 乙個元件上的 v model 缺省會利用名為 value 的 prop 和名為 input 的事件,但...
vue自定義元件,插槽,自定義事件
vue.component 自定義元件名 自定義模板 裡面套html標籤,可以取屬性的值 vue.component lover new vue script lover div 自定義元件模板 bitqian標籤 vue.component bitqian new vue script v for...