vue 自定義組件 v-model雙向綁定、 父子組件同步通信的多種寫法
上篇文章給大家介紹了淺析Vue自定義組件的v-model,大家可以參考下。接下來通過本文給大家介紹vue 自定義組件 v-model雙向綁定、 父子組件同步通信的多種寫法,具體詳情如下所示:
父子組件通信,都是單項的,很多時候需要雙向通信。方法如下:
1、父組件使用:msg.sync="aa" 子組件使用$emit('update:msg', 'msg改變后的值xxx')
2、父組件傳值直接傳對象,子組件收到對象后可隨意改變對象的屬性,但不能改變對象本身。
3、父組件使用: v-model
第一種曾經(jīng)被廢除過,由于維護成本的原因被刪掉,但經(jīng)過證實,確實有存在的意義,又被加上。
第一種:
父組件:
<template>
<div>
<aa class="abc" :snycTest.sync="test" ></aa>
{{'外面的值:' + test}}
<button @click="fn">
外面改變里面
</button>
</div>
</template>
<script>
import aa from './test.vue'
export default {
data () {
return {
test: ''
}
},
methods: {
fn () {
this.test += 1
}
},
components:{
aa
}
}
</script>
子組件:
<template>
<div>
<ul>
<li>{{'里面的值:'+ snycTest}}</li>
<button @click="fn2">里面改變外面</button>
</ul>
</div>
</template>
<script>
export default {
props: {
snycTest: ''
},
methods: {
fn2 () {
this.$emit('update:snycTest', this.snycTest+1) //這兒是關(guān)鍵 update:snycTest 自定義事件會告訴父組件將父組件的 test值改為this.snycTest+1,并傳回給子組件。
} } } </script>
v-model寫法一:
父組件:
<template>
<div>
<aa class="abc" v-model="test" ></aa> // 組件中使用v-model
{{'外面的值:' + test}} // 這兒試驗test與內(nèi)部msg值為雙向綁定關(guān)系
<button @click="fn">
外面改變里面
</button>
</div>
</template>
<script>
import aa from './test.vue'
export default {
data () {
return {
test: ''
}
},
methods: {
fn () {
this.test += 1
}
},
components:{
aa
}
}
</script>
子組件寫法一:
<template>
<div>
<ul>
<li>{{'里面的值:'+ msg}}</li>
<button @click="fn2">里面改變外面</button>
</ul>
</div>
</template>
<script>
export default {
model: { // 使用model, 這兒2個屬性,prop屬性說,我要將msg作為該組件被使用時(此處為aa組件被父組件調(diào)用)v-model能取到的值,event說,我emit ‘cc' 的時候,參數(shù)的值就是父組件v-model收到的值。
prop: 'msg',
event: 'cc'
},
props: {
msg: ''
},
methods: {
fn2 () {
this.$emit('cc', this.msg+2)
}
}
}
</script>
v-model寫法二
父組件 <aa class="abc" v-model='test' ></aa> 。
子組件
<template>
<div>
<ul>
<li>{{'里面的值:'+ value}}</li> // 組件使用時有v-model屬性,value初始傳的‘what' 不會被渲染,而是v-model綁定的test值被渲染,這兒value會被重新賦值為v-model綁定的test的值。
<button @click="fn2">里面改變外面</button>
</ul>
</div>
</template>
<script>
export default {
props: {
value: { // 必須要使用value
default: '',
},
},
methods: {
fn2 () {
this.$emit('input', this.value+2) // 這兒必須用input 發(fā)送數(shù)據(jù),發(fā)送的數(shù)據(jù)會被父級v-model=“test”接受到,再被value=test傳回來。
}
}
}
一般雙向綁定用v-model寫法一。
總結(jié)
以上所述是小編給大家介紹的vue 自定義組件 v-model雙向綁定、 父子組件同步通信的多種寫法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問題解決方案
這篇文章主要介紹了詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問題解決方案,非常具有實用價值,需要的朋友可以參考下2017-09-09
vue3中使用vuedraggable實現(xiàn)拖拽el-tree數(shù)據(jù)分組功能
這篇文章主要介紹了vue3中使用vuedraggable實現(xiàn)拖拽el-tree數(shù)據(jù)分組功能,可以實現(xiàn)單個拖拽、雙擊添加、按住ctrl鍵實現(xiàn)多個添加,或者按住shift鍵實現(xiàn)范圍添加,添加到框中的數(shù)據(jù),還能拖拽排序,需要的朋友可以參考下2024-02-02
如何在Vue3和Vite項目中用SQLite數(shù)據(jù)庫進行數(shù)據(jù)存儲
SQLite是一種嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是一個零配置、無服務器的、自給自足的、事務性的SQL數(shù)據(jù)庫引擎,這篇文章主要給大家介紹了關(guān)于如何在Vue3和Vite項目中用SQLite數(shù)據(jù)庫進行數(shù)據(jù)存儲的相關(guān)資料,需要的朋友可以參考下2024-03-03
Vue+Echarts報錯Cannot?set?properties?of?undefined?(settin
這篇文章主要介紹了Vue+Echarts報錯Cannot?set?properties?of?undefined?(setting?‘plate‘)的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08

