vue組件封裝v-model,組件嵌套組件時(shí)封裝v-model

首先來理解下 v-model

<input v-model="something">

是語法糖

<input
  v-bind:value="something"
  v-on:input="something = $event.target.value">

與組件一起使用時(shí)油挥,簡化為

<custom-input
  :value="something"
  @input="value => { something = value }">
</custom-input>

所以對(duì)于一個(gè)組件來說v-model顾患,它應(yīng)該(這些可以在2.2.0+中配置):
1.接受value道具
2.用新值發(fā)出一個(gè)input事件

一個(gè)組件上的 v-model 默認(rèn)會(huì)利用名為 value 的 prop 和名為 input 的事件,但是像單選框用踩、復(fù)選框等類型的輸入控件可能會(huì)將 value 特性用于不同的目渠退。model 選項(xiàng)可以用來避免這樣的沖突:

<template>
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
</template>
<script>
export default {
    name: 'base-checkbox',
    model:{
        prop: 'checked',
        event: 'change'
    },
    props: {checked: Boolean}
}

現(xiàn)在在這個(gè)組件上使用 v-model 的時(shí)候:

<base-checkbox v-model="lovingVue"></base-checkbox>

這里的 lovingVue 的值將會(huì)傳入這個(gè)名為 checked 的 prop。同時(shí)當(dāng) <base-checkbox> 觸發(fā)一個(gè) change 事件并附帶一個(gè)新的值的時(shí)候脐彩,這個(gè) lovingVue 的屬性將會(huì)被更新碎乃。

以上是官網(wǎng)的基本的方法,弄懂以上的前提下惠奸,我們來繼續(xù)看嵌套組件時(shí)怎么再封裝一個(gè)v-model梅誓,我們新建一個(gè)組件special-checkbox里面包含上面的組件base-checkbox,如何將子父組件的v-model打通

<template>
  <base-checkbox v-model="newlovingVue"></base-checkbox>
</template>
<script>
export default {
    name: 'special-checkbox ',
    model:{
        prop:'lovingVue',//要存在于proops
        event:'change'//當(dāng)組件的值發(fā)生改變時(shí)要emit的事件名
    },
    props: ['lovingVue'],
    data:function(){
        return{//要重新定義一個(gè)data佛南,賦值為props中的值梗掰,因?yàn)榻M件時(shí)單數(shù)據(jù)流,不能直接修改props
            newlovingVue:this.lovingVue
        } 
    },
    watch:{//這里檢測data中的值嗅回,一旦發(fā)生變化就提交事件到父組件
        newlovingVue:function(newVal,oldVal){
            this.$emit('change',newVal)
        }
    }
}
</script>

現(xiàn)在使用這個(gè)二次封裝的組件的時(shí)候

<special-checkbox v-model="lovingVue"></base-checkbox>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愧怜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子妈拌,更是在濱河造成了極大的恐慌拥坛,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尘分,死亡現(xiàn)場離奇詭異猜惋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)培愁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門著摔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人定续,你說我怎么就攤上這事谍咆。” “怎么了私股?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵摹察,是天一觀的道長。 經(jīng)常有香客問我倡鲸,道長供嚎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮克滴,結(jié)果婚禮上逼争,老公的妹妹穿的比我還像新娘。我一直安慰自己劝赔,他們只是感情好誓焦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著着帽,像睡著了一般杂伟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上启摄,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天稿壁,我揣著相機(jī)與錄音,去河邊找鬼歉备。 笑死傅是,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蕾羊。 我是一名探鬼主播喧笔,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼龟再!你這毒婦竟也來了书闸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤利凑,失蹤者是張志新(化名)和其女友劉穎浆劲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哀澈,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牌借,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了割按。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膨报。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖适荣,靈堂內(nèi)的尸體忽然破棺而出现柠,到底是詐尸還是另有隱情,我是刑警寧澤弛矛,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布够吩,位于F島的核電站,受9級(jí)特大地震影響汪诉,放射性物質(zhì)發(fā)生泄漏废恋。R本人自食惡果不足惜谈秫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一扒寄、第九天 我趴在偏房一處隱蔽的房頂上張望鱼鼓。 院中可真熱鬧,春花似錦该编、人聲如沸迄本。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘉赎。三九已至,卻和暖如春于樟,著一層夾襖步出監(jiān)牢的瞬間公条,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國打工迂曲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靶橱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓路捧,卻偏偏與公主長得像关霸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杰扫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 組件注冊(cè) 組件名 在注冊(cè)一個(gè)組件的時(shí)候队寇,我們始終需要給它一個(gè)名字。 該組件名就是Vue.component的第一個(gè)...
    oWSQo閱讀 399評(píng)論 0 1
  • 什么是組件章姓? 組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一佳遣。組件可以擴(kuò)展 HTML 元素,封裝...
    youins閱讀 9,487評(píng)論 0 13
  • 以下內(nèi)容是我在學(xué)習(xí)和研究Vue時(shí)凡伊,對(duì)Vue的特性零渐、重點(diǎn)和注意事項(xiàng)的提取、精練和總結(jié)窗声,可以做為Vue特性的字典相恃; 1...
    科研者閱讀 14,093評(píng)論 3 24
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容笨觅。關(guān)于...
    云之外閱讀 5,052評(píng)論 0 29
  • 主要還是自己看的拦耐,所有內(nèi)容來自官方文檔。 介紹 Vue.js 是什么 Vue (讀音 /vju?/见剩,類似于 vie...
    Leonzai閱讀 3,358評(píng)論 0 25