vue如何在自定義組件中使用v-model

v-model指令
所謂的“指令”其實(shí)就是擴(kuò)展了HTML標(biāo)簽功能(屬性)。

先來(lái)一個(gè)組件,不用vue-model,正常父子通信

<!-- parent -->
<template>
<div class="parent">
  <p>我是父親, 對(duì)兒子說(shuō): {{sthGiveChild}}</p>
  <Child @returnBack="turnBack" :give="sthGiveChild"></Child>
</div>
</template>
<script>
import Child from './Child.vue';
export default {
  data() {
    return {
      sthGiveChild: '給你100塊'
    };
  },
  components: {
    Child
  },
  methods: {
    turnBack(val) {
      this.sthGiveChild = val;
    }
  }
}
</script>
<!-- child -->
<template>
<div class="child">
  <p>我是兒子,父親對(duì)我說(shuō): {{give}}</p>
  <a href="javascript:;" rel="external nofollow" @click="returnBackFn">回應(yīng)</a>
</div>
</template>
<script>
export default {
  props: {
    give: String
  },
  methods: {
    returnBackFn() {
      this.$emit('returnBack', '還你200塊');
    }
  }
}
</script>

點(diǎn)擊回應(yīng)后,父親對(duì)兒子說(shuō)的話變成了兒子的回應(yīng)。兒子收到的信息也變了,實(shí)現(xiàn)通信。

改用v-model

<!-- parent -->
<template>
<div class="parent">
  <p>我是父親, 對(duì)兒子說(shuō): {{sthGiveChild}}</p>
  <Child v-model="sthGiveChild"></Child>
</div>
</template>
<script>
import Child from './Child.vue';
export default {
  data() {
    return {
      sthGiveChild: '給你100塊'
    };
  },
  components: {
    Child
  }
}
</script>
<!-- child -->
<template>
<div class="child">
  <p>我是兒子,父親對(duì)我說(shuō): {{give}}</p>
  <a href="javascript:;"rel="external nofollow" @click="returnBackFn">回應(yīng)</a>
</div>
</template>
<script>
export default {
  props: {
    give: String
  },
  model: {
    prop: 'give',
    event: 'returnBack'
  },
  methods: {
    returnBackFn() {
      this.$emit('returnBack', '還你200塊');
    }
  }
}
</script>

文案雖有不同,但是效果最終是一致的。
官網(wǎng)https://cn.vuejs.org/v2/api/#model
有這么一句話: 默認(rèn)情況下,一個(gè)組件上的 v-model 會(huì)把 value 用作 prop 且把 input 用作 event。
嘗試把上邊子組件的例子改一下,也是跑的通的

<!-- child -->
<template>
<div class="child">
  <p>我是兒子,父親對(duì)我說(shuō): {{value}}</p>
  <a href="javascript:;" rel="external nofollow" @click="returnBackFn">回應(yīng)</a>
</div>
</template>
<script>
export default {
  props: {
    value: String
  },
  methods: {
    returnBackFn() {
      this.$emit('input', '還你200塊');
    }
  }
}
</script>

做一下總結(jié):
如果你懶,不想自己去處理事件,那就用默認(rèn)的 'value' && 'input' 事件去處理,如果用原生事件的,甚至連model屬性也可以省去。

如果你想自己的代碼比較明確,區(qū)分出自定義事件,那么下面的組合才是你的菜。
prop和event看你自己心情定義,當(dāng)然要知名見意【盡量避開關(guān)鍵字】

model: {
prop: 'someProp', // 注意,是prop,不帶s。我在寫這個(gè)速記的時(shí)候,多寫了一個(gè)s,調(diào)試到懷疑人生
event: 'someEvent'
}
this.$emit('someEvent', [returnValueToParent])

原文件地址:http://www.cnblogs.com/ufex/p/9035269.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,178評(píng)論 0 29
  • 什么是組件? 組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝...
    youins閱讀 9,708評(píng)論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,586評(píng)論 19 139
  • 1.安裝 可以簡(jiǎn)單地在頁(yè)面引入Vue.js作為獨(dú)立版本,Vue即被注冊(cè)為全局變量,可以在頁(yè)面使用了。 如果希望搭建...
    Awey閱讀 11,300評(píng)論 4 129
  • 目標(biāo):1、了解v-model的本質(zhì)。2、了解v-model的實(shí)現(xiàn)原理。 我們知道Vue的核心特性之一是雙向綁定,v...
    LoveBugs_King閱讀 222,792評(píng)論 3 38

友情鏈接更多精彩內(nèi)容