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.在子元件中用props接收父元件傳過來的value,model)
子元件中:
"text"
:value=
"uname" @input=
"updateval($event.target.value)"
>
<
/template>
vue.
component
('my-input',,
props:},
methods:}}
)
父元件內使用時,使用v-model就可以啦
// name是父元件中的屬性
"name" value=
"some value"
>
<
/my-input>
}<
/p>
等價於
'name' @change***=
'val => ' value=
'some value'
>
<
/my-input>
vue 自定義元件使用v model
是我們常用的雙向繫結方法,如果在自定義元件中如何使用v model進行雙向繫結呢?首先我們必須要清除v model繫結的原理如下 其實v model的語法糖是這樣包裝而成的 而乙個元件上使用時則會簡化成這樣子 因此,對於乙個帶有 v model 的元件 核心用法 它應該如下 1 帶有v model的...
vue 自定義元件使用v model
v model指令其實是下面的語法糖包裝而成 在乙個元件上使用 v model 時,會簡化為 因此,對於乙個帶有v model的元件,它應該如下 利用 emit 觸發 input 事件 this.emit input value 元件1 vue.component my component prop...
vue 自定義元件使用v model
父元件 使用 v model 子元件 預設 需要props value的屬性,需要乙個方法 進行如下操作,input是 this.emit input input.value 就是 介面觸發子元件某個事件 提交引數到父元件 input事件 父元件v model 子元件value屬性 有這麼乙個流程 ...