摘要:用法中比較基礎(chǔ)的用法是在表單控件中,創(chuàng)建雙向數(shù)據(jù)綁定,能夠更新數(shù)據(jù)并負(fù)責(zé)監(jiān)聽用戶的輸入事件實例代碼這里是監(jiān)聽了輸入框的事件,并將其賦值給。找到的父組件就是組件,里面沒有注冊任何方法只是了屬性。因為在也是利用了的語法糖。
Vue v-model 用法
vue 中v-model 比較基礎(chǔ)的用法是在表單控件中,創(chuàng)建雙向數(shù)據(jù)綁定,能夠更新數(shù)據(jù)并負(fù)責(zé)監(jiān)聽
用戶的輸入事件
實例代碼
Message is: {{ message }}
// 這里是監(jiān)聽了輸入框的input 事件,并將其value賦值給message。 ==》
詳細(xì)解釋
這里根據(jù)文檔上看,指出v-model 只是一種語法糖,同樣使用checkbox 時,我們也使用了v-model 來更新 當(dāng)前復(fù)選框是不是在被選中狀態(tài),這里監(jiān)聽的是change 事件,
{checked =val}" Value = "other" >
在checkbox 中,就可以使用value屬性去做其它事情,
v-model 指令對于不同的 type 類型會綁定在不同的事件上,查看vue.common.js 中的代碼就可以發(fā)現(xiàn):
if (el.component) { genComponentModel(el, value, modifiers); // component v-model doesn"t need extra runtime return false } else if (tag === "select") { genSelect(el, value, modifiers); } else if (tag === "input" && type === "checkbox") { genCheckboxModel(el, value, modifiers); } else if (tag === "input" && type === "radio") { genRadioModel(el, value, modifiers); } else if (tag === "input" || tag === "textarea") { genDefaultModel(el, value, modifiers); } else if (!config.isReservedTag(tag)) { genComponentModel(el, value, modifiers);checkbox
v-model會根據(jù)input 標(biāo)簽中的type 類型不同, 相應(yīng)的使用不同的 方法。
再看到 type=“checkbox” 對應(yīng)的方法,
this.listener = function () { var model = self._watcher.value; // 獲取綁定指令 的 數(shù)組,在chang 事件發(fā)生時,時刻操作value 數(shù)組的變化 if (isArray(model)) { var val = self.getValue(); if (el.checked) { if (indexOf(model, val) < 0) { // checkbox 已經(jīng)被勾選后,首先在model數(shù)組中查找有沒有被勾選checkbox 的對應(yīng)value,沒有的的話就加入進(jìn)去,這里也可以推斷出在v-model 綁定在一組checkbox中時,可以記錄所有的選中的值。 model.push(val); } } else { // checkbox 被取消,就在model中 刪除checkbox 對應(yīng)的value, model.$remove(val); } } else { self.set(getBooleanValue()); } }; // 將this.listener 函數(shù)綁定到 input 的 chang 事件中去, 在checkbox 發(fā)生變化時, this.on("change", this.listener);
上面也是從vue.js 中截取的代碼, 就可以用來解釋官網(wǎng)中這段實例:
Checked names: {{ checkedNames }}
里面的checkedNames 可以保存所有已經(jīng)被勾選的input 對應(yīng)的value ,還不會有重復(fù)的值。
ElementUI elCheckboxGroup官方示例
然后就聯(lián)想到了ElementUI中
checkAll數(shù)組中就保存著 內(nèi)部 elCheckbox 組件對應(yīng)所有已經(jīng)勾選的數(shù)組,
查看ElementUI 源碼中 checkbox.vue 對應(yīng)文件(只截取對應(yīng)功能片斷):
checkbox.vue template: script: methods:{ handleChange(ev) { this.$emit("change", ev); if (this.isGroup) { this.$nextTick(_ => { this.dispatch("ElCheckboxGroup", "change", [this._checkboxGroup.value]); // 自定義dispatch 方法,向上遍歷找到parent組件 名字是ElCheckboxGroup 的父組件,并觸發(fā)對應(yīng)的change事件。 }); } } }
this.dispatch 找到的父組件就是 checkboxGroup組件,
checkboxGroup.vue template//里面沒有注冊任何 change 方法 script : watch: { value(value) { this.dispatch("ElFormItem", "el.form.change", [value]); } } // 只是watch 了value 屬性。
因為在
===
也是利用了 v-model 的語法糖。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/87251.html
摘要:學(xué)習(xí)筆記表單與表單與提供了指令,用于在表單類元素上雙向綁定數(shù)據(jù)。事實上,也是一個特殊的語法糖,只不過它會在不同的表單上智能處理。選擇的項復(fù)選框復(fù)選框單獨使用時,也是用綁定一個布爾值。復(fù)選框選擇列表當(dāng)選中時,是一個,所以。 學(xué)習(xí)筆記:表單與v-model 表單與v-model Vue.js提供了v-model指令,用于在表單類元素上雙向綁定數(shù)據(jù)。 使用v-model后,表單控件顯示的值...
摘要:子組件也屬于當(dāng)前實例。監(jiān)聽鉤子函數(shù)的場景使用的不多,但是還是要知道的。可以獲取到父組件傳遞的除和外的所有自定義屬性。 一. 父組件向子組件傳值 創(chuàng)建parent和child組件,并在parent中注冊child組件 在父組件調(diào)用子組件標(biāo)簽中添加一個自定義屬性(msg), im...
摘要:來了兩個星期的緊張開發(fā),終于發(fā)布了支持的版本。整體性能也大幅度提升。報名費用元,報名地址微信掃描二維碼更新日志目前已發(fā)布至,文檔還需一段時間,但很快會發(fā)布新版本的來支持。 showImg(https://segmentfault.com/img/remote/1460000008640063?w=1600&h=900); iView2 來了 兩個星期的緊張開發(fā),iView 終于發(fā)布了支...
摘要:如何巧妙利用實現(xiàn)父子組件傳值通常子組件某個變量更新,并需要告知父組件時,需要子組件觸發(fā)事件并父組件監(jiān)聽該事件。但是熟悉上面的實現(xiàn)原理后,我們可以巧妙地運用這一原理在內(nèi)部使用不同的屬性為不同的輸入元素并拋出不同的事件。 v-model介紹 熟悉Vue的小伙伴們都知道 v-model 是Vue的一個很大的特色,可以實現(xiàn)雙向數(shù)據(jù)綁定。但本質(zhì)上呢,它不過是語法糖,它負(fù)責(zé)監(jiān)聽用戶的輸入事件以更新...
閱讀 3457·2021-11-25 09:43
閱讀 2605·2021-09-22 15:54
閱讀 590·2019-08-30 15:55
閱讀 974·2019-08-30 15:55
閱讀 1998·2019-08-30 15:55
閱讀 1741·2019-08-30 15:53
閱讀 3465·2019-08-30 15:52
閱讀 2039·2019-08-30 12:55