国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

自定義Vue中的v-module雙向綁定的實現

2019-11-19 11:45:47
字體:
來源:轉載
供稿:網友

v-module 雙向綁定實際上就是通過子組件中的 $emit 方法派發 input 事件,父組件監聽 input 事件中傳遞的 value 值,并存儲在父組件 data 中;然后父組件再通過 prop 的形式傳遞給子組件 value 值,再子組件中綁定 input 的 value 屬性即可。

我們著手實現一遍:

子組件傳值

首先子組件需要一個 input 標簽,這個 input 標簽需要綁定 input 事件,$emit 觸發父組件的 input 事件,通過這種方法子組件傳遞值給父組件

<input type="text" @input="$emit('input', $event.target.value)">

父組件監聽 input 事件,然后將事件攜帶的 input 輸入的值傳入到 data 狀態中

<my-comp @input="value = $event"></my-comp>
export default { // ... data () {  return {   value: 'initial value' // 維護一個 value 狀態  } }}

至此子組件監聽 input 事件,用戶輸入字符串即可被父組件獲取到并保存在 data 狀態中

父組件傳值

然后父組件還需要將 value 值傳遞給子組件,子組件再綁定 value 值到 input 的 value 屬性上

<my-comp :value="value" @input="value = $event"></my-comp>

增加 :value="value" 通過 prop 傳遞 value

子組件中綁定 input 的 value 屬性

<input type="text" @input="$emit('input', $event.target.value)" :value="value">

注意 props 中需要設定 value

export default { name: 'MyComp', props: ['value']}

至此自定義的 v-module 處理完畢,看看效果:

其他元素使用 v-model

在 input 上使用 v-model 比較簡單,但考慮到其他元素不一定是要監聽 input 事件而是 change 事件,也不一定是 value 屬性改變元素的內容。比如 checkbox,我們就需要監聽 change 事件,以及 checked 屬性。

那么先手動實現一遍:

<input type="checkbox" @change="$emit('change', $event.target.checked)" :checked="checked">

子組件首先監聽 change 事件,并 $emit 方法觸發父組件的 change 事件,將 checked 屬性值傳入給父組件;同時接收父組件傳遞進來的 checked 值,根據 checked 值決定 input 元素的 checked 屬性。

export default { name: 'MyComp', props: ['checked']}

然后需要修改父組件:

<my-comp @change="checked = $event"></my-comp>
export default {  // ... data () {  return {   checked: false  } }}

父組件監聽 change 事件,并在 data 中維護狀態 checked,默認值為 false

最后看看效果:

直接使用 v-model 指令

此外還可直接使用 v-model 指令:

<my-comp v-model="checked"></my-comp>

但需要在組件中修改 v-model 指令,指定 prop 和 event:

export default { name: 'MyComp', props: ['checked'], model: {  prop: 'checked',  event: 'change' }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新龙县| 临城县| 中阳县| 桑日县| 洪泽县| 平顺县| 美姑县| 夹江县| 万全县| 白沙| 塔城市| 东乡| 丹寨县| 青神县| 武定县| 科技| 长寿区| 蓬莱市| 大连市| 常州市| 高平市| 伊金霍洛旗| 梨树县| 云浮市| 安陆市| 阿合奇县| 原平市| 芜湖市| 普兰县| 和静县| 昌都县| 郧西县| 顺平县| 泸西县| 随州市| 北宁市| 北宁市| 竹北市| 吐鲁番市| 张家口市| 辽宁省|