最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue父子組件雙向綁定傳值的實現(xiàn)方法

 更新時間:2018年07月31日 15:17:16   作者:chavesgu  
父子組件之間的雙向綁定非常簡單,但是很多人因為是從Vue 2+開始使用的,可能不知道如何雙向綁定,接下來通過本文給大家介紹Vue父子組件雙向綁定傳值的實現(xiàn)方法,需要的朋友可以參考下

父子組件之間的雙向綁定非常簡單,但是很多人因為是從Vue 2+開始使用的,可能不知道如何雙向綁定,當(dāng)然最簡單的雙向綁定(單文件中)就是表單元素的 v-model 了,例如 <input type="text" /> 它會響應(yīng)表單元素的 value 屬性,當(dāng)輸入框文本改變時,會將 value 值傳給 v-model 所綁定的變量,如果同時設(shè)置 v-model 和 value , value 屬性無效。

父子組件的自定義雙向 v-model

當(dāng)若干dom封裝成組件時,在父組件中使用子組件時,卻無法在子組件標(biāo)簽上使用 v-model ,因為子組件標(biāo)簽不是表單元素,這個時候,我們需要自定義我們想要的 v-model 規(guī)則。

<!-- children.vue -->
<template>
 <h1>{{ msg }}</h1>
</template>
<script>

export default{
 model:{
  prop:'msg',//這個字段,是指父組件設(shè)置 v-model 時,將變量值傳給子組件的 msg
  event:'parent-event'//這個字段,是指父組件監(jiān)聽 parent-event 事件
 },
 props:{
  msg:String //此處必須定義和model的prop相同的props,因為v-model會傳值給子組件
 },
 mounted(){
 //這里模擬異步將msg傳到父組件v-model,實現(xiàn)雙向控制
  setTimeout(_=>{
   let some = '3秒后出現(xiàn)的某個值';//子組件自己的某個值
   this.$emit('praent-event',some);
   //將這個值通過 emit 觸發(fā)parent-event,將some傳遞給父組件的v-model綁定的變量
  },3000);
 }
}
</script>

<!-- parent.vue -->
<template>
 <children v-model="parentMsg"></children>
</template>
<script>
import children from 'path/to/children.vue';
export default{
 components:{
  children
 },
 data(){
  return{
   parentMsg:'test'
  }
 },
 watch:{
  parentMsg(newV,oldV){
   console.log(newV,oldV);
   //三秒后控制臺會輸出
   //'3秒后出現(xiàn)的某個值','test'
  }
 }
}
</script>

你學(xué)會組件的自定義 v-model 了嗎 ? 如果是普通的表單元素,同理,監(jiān)聽表單的 input 或者 change 事件,實時將 value 或者 checked 通過 $emit 傳遞就可以了。

父子組件的自定義多個雙向值

上述例子,是實現(xiàn)單個prop值的雙向綁定,當(dāng)組件的需求需要復(fù)雜的操作,需要多個雙向值,是如何實現(xiàn)的呢。這里需要用到以前被vue拋棄,后來又回歸的 .sync 修飾符。

事實上,這個比 v-model 更加簡單

<!-- children.vue -->
<template>
 <h1>{{ msg }}</h1>
</template>
<script>

export default{
 props:{
  msg:String
 },
 mounted(){
 //這里模擬異步將msg傳到父組件v-model,實現(xiàn)雙向控制
  setTimeout(_=>{
   let some = '3秒后出現(xiàn)的某個值';//子組件自己的某個值
   this.$emit('update:msg',some);
   //將這個值通過 emit
   //update為固定字段,通過冒號連接雙向綁定的msg,將some傳遞給父組件的v-model綁定的變量
  },3000);
 }
}
</script>

<!-- parent.vue -->
<template>
 <children :msg.sync="parentMsg"></children>
 <!-- 此處只需在平時常用的單向傳值上加上.sync修飾符 -->
</template>
<script>
import children from 'path/to/children.vue';
export default{
 components:{
  children
 },
 data(){
  return{
   parentMsg:'test'
  }
 },
 watch:{
  parentMsg(newV,oldV){
   console.log(newV,oldV);
   //三秒后控制臺會輸出
   //'3秒后出現(xiàn)的某個值','test'
  }
 }
}
</script>

此處需要注意,雖然加上 .sync 即可雙向綁定,但是還是要依靠子組件 $emit 去觸發(fā) update:prop名 實現(xiàn)修改父組件的變量值實現(xiàn)雙向數(shù)據(jù)流,如果直接對prop的屬性直接賦值,依然會出現(xiàn)報錯。

事實上, .sync 修飾符是一個簡寫,它做了一件事情

<template>
 <children :msg.sync="parentMsg"></children>
 <!-- 等價于 -->
 <children :msg="parentMsg" @updata:msg="parentMsg = $event"></children>
 <!-- 這里的$event就是子組件$emit傳遞的參數(shù) -->
</template>

當(dāng)需要把一個對象中的屬性全部通過 .sync 傳入雙向數(shù)據(jù)流時,可以再簡便一下寫法

<template>
 <children :.sync="obj"></children>
</template>
<script>
export default{
 components:{
  children
 },
 data(){
  return{
   obj:{
    parentMsg:'test'
   }
  }
 }
}
</script>

當(dāng)使用這種寫法時,會將obj對象中的所有屬性都通過獨(dú)立的props傳遞給子組件,并監(jiān)聽對應(yīng)的 update: ,此時在子組件中也要聲明對應(yīng)的props。

總結(jié)

以上所述是小編給大家介紹的Vue父子組件雙向綁定傳值的實現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue 監(jiān)聽是否切屏和開啟小窗的實現(xiàn)過程

    vue 監(jiān)聽是否切屏和開啟小窗的實現(xiàn)過程

    這篇文章主要介紹了vue 監(jiān)聽是否切屏和開啟小窗的過程,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue-cli腳手架初始化項目各個文件夾用途

    vue-cli腳手架初始化項目各個文件夾用途

    這篇文章主要介紹了vue-cli腳手架初始化項目各個文件夾用途,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • vue中用動態(tài)組件實現(xiàn)選項卡切換效果

    vue中用動態(tài)組件實現(xiàn)選項卡切換效果

    本篇文章主要介紹了vue中用動態(tài)組件實現(xiàn)選項卡切換效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Vue.js中安裝一個路由器demo

    Vue.js中安裝一個路由器demo

    這篇文章主要為大家介紹了Vue.js中安裝一個路由器demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • ElementUI如何修改el-cascader的默認(rèn)樣式

    ElementUI如何修改el-cascader的默認(rèn)樣式

    ElementUI 是一套u(yù)i組件庫,目前最新版本 react 和 vue 等主流框架都有支持。該庫默認(rèn)主題色是天藍(lán)色,若用于項目開發(fā),難免遇到要需求修改其默認(rèn)樣式的情況,這篇文章主要介紹了ElementUI如何修改el-cascader的默認(rèn)樣式,需要的朋友可以參考下
    2023-12-12
  • Vue?Steam同款登錄驗證數(shù)字輸入框功能

    Vue?Steam同款登錄驗證數(shù)字輸入框功能

    這篇文章主要介紹了Vue?Steam同款登錄驗證數(shù)字輸入框功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • Vue3自定義指令的實踐示例

    Vue3自定義指令的實踐示例

    這篇文章主要為大家詳細(xì)介紹了Vue3中自定義指令的實踐,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-06-06
  • vue可ctrl,shift多選,可添加標(biāo)記日歷組件詳細(xì)

    vue可ctrl,shift多選,可添加標(biāo)記日歷組件詳細(xì)

    這篇文章主要介紹了vue可ctrl,shift多選,可添加標(biāo)記日歷組件詳細(xì),文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • vue安裝node-sass和sass-loader報錯問題的解決辦法

    vue安裝node-sass和sass-loader報錯問題的解決辦法

    這篇文章主要給大家介紹了關(guān)于vue安裝node-sass和sass-loader報錯問題的解決辦法,文中通過圖文以及示例代碼將解決的方法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-01-01
  • Vue CLI中模式與環(huán)境變量的深入詳解

    Vue CLI中模式與環(huán)境變量的深入詳解

    模式是 Vue CLI 項目中一個重要的概念,下面這篇文章主要給大家介紹了關(guān)于Vue CLI中模式與環(huán)境變量的相關(guān)資料,需要的朋友可以參考下
    2021-05-05

最新評論

郓城县| 昌邑市| 习水县| 龙胜| 马关县| 双江| 东兴市| 兴和县| 若羌县| 天镇县| 大余县| 虎林市| 朝阳区| 双辽市| 防城港市| 泰宁县| 民乐县| 田阳县| 林州市| 长子县| 江油市| 安岳县| 庆阳市| 苏尼特右旗| 宁乡县| 莱阳市| 崇礼县| 南乐县| 祁连县| 吴堡县| 靖远县| 石首市| 肥城市| 罗田县| 承德市| 瑞昌市| 大连市| 卢氏县| 山东省| 林周县| 从江县|