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) //這兒是關鍵 update:snycTest 自定義事件會告訴父組件將父組件的 test值改為this.snycTest+1,并傳回給子組件。 } } } </script>
v-model寫法一:
父組件:
<template> <div> <aa class="abc" v-model="test" ></aa> // 組件中使用v-model {{'外面的值:' + test}} // 這兒試驗test與內部msg值為雙向綁定關系 <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組件被父組件調用)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寫法一。
總結
以上所述是小編給大家介紹的vue 自定義組件 v-model雙向綁定、 父子組件同步通信的多種寫法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問題解決方案
這篇文章主要介紹了詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問題解決方案,非常具有實用價值,需要的朋友可以參考下2017-09-09vue3中使用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是一種嵌入式關系型數(shù)據(jù)庫管理系統(tǒng),是一個零配置、無服務器的、自給自足的、事務性的SQL數(shù)據(jù)庫引擎,這篇文章主要給大家介紹了關于如何在Vue3和Vite項目中用SQLite數(shù)據(jù)庫進行數(shù)據(jù)存儲的相關資料,需要的朋友可以參考下2024-03-03Vue+Echarts報錯Cannot?set?properties?of?undefined?(settin
這篇文章主要介紹了Vue+Echarts報錯Cannot?set?properties?of?undefined?(setting?‘plate‘)的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08