欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

export default{
 model:{
  prop:'msg',//這個(gè)字段,是指父組件設(shè)置 v-model 時(shí),將變量值傳給子組件的 msg
  event:'parent-event'//這個(gè)字段,是指父組件監(jiān)聽 parent-event 事件
 },
 props:{
  msg:String //此處必須定義和model的prop相同的props,因?yàn)関-model會(huì)傳值給子組件
 },
 mounted(){
 //這里模擬異步將msg傳到父組件v-model,實(shí)現(xiàn)雙向控制
  setTimeout(_=>{
   let some = '3秒后出現(xiàn)的某個(gè)值';//子組件自己的某個(gè)值
   this.$emit('praent-event',some);
   //將這個(gè)值通過 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);
   //三秒后控制臺(tái)會(huì)輸出
   //'3秒后出現(xiàn)的某個(gè)值','test'
  }
 }
}
</script>

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

父子組件的自定義多個(gè)雙向值

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

事實(shí)上,這個(gè)比 v-model 更加簡(jiǎn)單

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

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

<!-- parent.vue -->
<template>
 <children :msg.sync="parentMsg"></children>
 <!-- 此處只需在平時(shí)常用的單向傳值上加上.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);
   //三秒后控制臺(tái)會(huì)輸出
   //'3秒后出現(xiàn)的某個(gè)值','test'
  }
 }
}
</script>

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

事實(shí)上, .sync 修飾符是一個(gè)簡(jiǎn)寫,它做了一件事情

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Vue使用Element-UI實(shí)現(xiàn)分頁(yè)效果全過程

    Vue使用Element-UI實(shí)現(xiàn)分頁(yè)效果全過程

    element-ui官網(wǎng)上有分頁(yè)實(shí)現(xiàn)的功能,簡(jiǎn)單方便又好用,也有很多分頁(yè)的樣式,你可以根據(jù)需要去選擇自己想要的樣式,下面這篇文章主要給大家介紹了關(guān)于Vue使用Element-UI實(shí)現(xiàn)分頁(yè)效果的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • vue-cli4.5.x快速搭建項(xiàng)目

    vue-cli4.5.x快速搭建項(xiàng)目

    vue-cli是一個(gè)官方發(fā)布vue.js項(xiàng)目腳手架,使用vue-cli可以快速創(chuàng)建vue項(xiàng)目。本文介紹了vue-cli4.5.x快速搭建項(xiàng)目,感興趣的可以了解一下
    2021-05-05
  • vue項(xiàng)目移動(dòng)端實(shí)現(xiàn)ip輸入框問題

    vue項(xiàng)目移動(dòng)端實(shí)現(xiàn)ip輸入框問題

    這篇文章主要介紹了vue項(xiàng)目移動(dòng)端實(shí)現(xiàn)ip輸入框問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • vue element 關(guān)閉當(dāng)前tab 跳轉(zhuǎn)到上一路由操作

    vue element 關(guān)閉當(dāng)前tab 跳轉(zhuǎn)到上一路由操作

    這篇文章主要介紹了vue element 關(guān)閉當(dāng)前tab 跳轉(zhuǎn)到上一路由操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 基于Vue.js實(shí)現(xiàn)簡(jiǎn)單搜索框

    基于Vue.js實(shí)現(xiàn)簡(jiǎn)單搜索框

    這篇文章主要為大家詳細(xì)介紹了基于Vue.js實(shí)現(xiàn)簡(jiǎn)單搜索框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Vue.js每天必學(xué)之指令系統(tǒng)與自定義指令

    Vue.js每天必學(xué)之指令系統(tǒng)與自定義指令

    Vue.js每天必學(xué)之指令系統(tǒng)與自定義指令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • vue實(shí)現(xiàn)el-select的change事件過程

    vue實(shí)現(xiàn)el-select的change事件過程

    這篇文章主要介紹了vue實(shí)現(xiàn)el-select的change事件過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • element-plus的自動(dòng)導(dǎo)入和按需導(dǎo)入方式詳解

    element-plus的自動(dòng)導(dǎo)入和按需導(dǎo)入方式詳解

    之前使用 ElementPlus 做項(xiàng)目的時(shí)候,由于不會(huì)使用按需引入耽誤了不少時(shí)間,這篇文章主要給大家介紹了關(guān)于element-plus自動(dòng)導(dǎo)入和按需導(dǎo)入的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 詳解如何在Vue2中實(shí)現(xiàn)組件props雙向綁定

    詳解如何在Vue2中實(shí)現(xiàn)組件props雙向綁定

    在Vue2中組件的props的數(shù)據(jù)流動(dòng)改為了只能單向流動(dòng),如何在Vue2中實(shí)現(xiàn)組件props雙向綁定 ,一起來跟小編看看。
    2017-03-03
  • 從vue源碼解析Vue.set()和this.$set()

    從vue源碼解析Vue.set()和this.$set()

    這篇文章主要介紹了從vue源碼看Vue.set()和this.$set()的相關(guān)知識(shí),我們先來從Vue提供的Vue.set()和this.$set()這兩個(gè)api看看它內(nèi)部是怎么實(shí)現(xiàn)的。感興趣的朋友跟隨小編一起看看吧
    2018-08-08

最新評(píng)論