vue的v model和自定義元件的model

2021-10-03 16:24:11 字數 1986 閱讀 7170

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屬性 有這麼乙個流程 ...