前端框架Vue父子組件數(shù)據(jù)雙向綁定的實(shí)現(xiàn)
實(shí)現(xiàn)思路:
父 向 子 組件傳值:使用 props
屬性。( props
是property
[屬性] 的復(fù)數(shù)簡寫 )
子 向 父 組件傳值:使用自定義事件。
一、父子組件單向傳值
1、父向子傳值
父向子組件傳值,子組件接收到數(shù)據(jù)之后,保存到自己的變量中。
//父組件寫法 <cld :numP="num" ></cld> //子組件定義以及數(shù)據(jù) components:{ cld:{ template:'#child', props:{ numP:Number }, } } //子組件內(nèi)容 <template id="child"> <div> {{ numP }} </div> </template>
props 用于接收父組件傳過來的值,props 的寫法有很多種,具體如:
//方式1 : 直接接收數(shù)據(jù) props: [ 'numP' ] //方式2: 加類型限制 props: [ numP: Number ] //方式3:添加默認(rèn)值 props: [ numP: { type:Number, default:0 } ] //方式4:是否必須值限制 props: [ numP: { type:Number, default:0, require:true //添加必須值,不傳此值會(huì)報(bào)錯(cuò) } ] //方式5:采用對象形式 props: { numP: { type:Number, default:0, } }
2、子向父傳值
子向父組件傳值,主要通過自定義事件進(jìn)行傳值,具體實(shí)例如下:
// 父組件內(nèi)容 <div> 子組件獲取到的數(shù)據(jù){{getNum}} <cld :numb="num" @accept="getNumC"></cld> </div> //父組件方法 methods:{ getNumC(data){ this.getNum = data //接收子組件傳的數(shù)據(jù) } }, //子組件定義 components:{ cld:{ template:'#child', data(){ return{ numC:1314 //子組件數(shù)據(jù)定義 } }, mounted(){ this.$emit( 'accept' , this.numC ) // 觸發(fā)自定義事件 } } },
二、父子組件數(shù)據(jù)雙向綁定
Vue
的數(shù)據(jù)都是單向流動(dòng)的,而且 vue
中從來就沒有任何的雙向綁定,v-model
實(shí)現(xiàn)的雙向綁定只是語法糖而已。
方式1:利用 watch
實(shí)現(xiàn)父子組件的數(shù)據(jù)雙向綁定,具體實(shí)例如下:
<div id="app"> 數(shù)據(jù)<br>{{num}} <input type="text" v-model="num"><br> <cld :numb="num" @accept="getNumC"></cld> </div> //子組件內(nèi)容 <template id="child"> <div> 數(shù)據(jù)<br>{{childNum}} <input type="text" v-model="childNum" /> </div> </template> <!-- 父子組件通信 --> const app = new Vue({ el:'#app', data:{ num:'520', }, methods:{ getNumC(data){ this.num = data } }, components:{ cld:{ template:'#child', props:{ numb:String }, data(){ return{ childNum:0, } }, watch:{ numb:function(){ this.childNum = this.numb }, childNum:function(){ this.$emit('accept',this.childNum) } }, mounted(){ this.childNum = this.numb } } } })
方式2:.sync
修飾符實(shí)現(xiàn)雙向綁定
在vue 1.x 中的 .sync 修飾符所提供的功能。當(dāng)一個(gè)子組件改變了一個(gè)帶 .sync 的 prop 的值時(shí),這個(gè)變化也會(huì)同步到父組件中所綁定的值。這很方便,但也會(huì)導(dǎo)致問題,因?yàn)樗茐牧藛蜗驍?shù)據(jù)流。(數(shù)據(jù)自上而下流,事件自下而上走)
<cld :numb.sync="num" ></cld> //會(huì)擴(kuò)展為: <cld :numb="bar" @update:numb=”val => bar = val”/>
當(dāng)組件需要更新 numb 的值時(shí),需要觸發(fā)更新事件:
this.$emit("update:numb", newValue );
使用具體實(shí)例如下:
// 父組件 <Father :foo.sync="foo"></Father> //子組件 props: ['foo'], data() { return { newFoo: this.foo; } }, methods:{ add:function(){ this.newMsg=10; this.$emit('update:foo',this.newFoo); } }
到此這篇關(guān)于前端框架Vue 父子組件數(shù)據(jù)雙向綁定的文章就介紹到這了,更多相關(guān)Vue 父子組件數(shù)據(jù)雙向綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中使用require.context自動(dòng)引入組件的操作方法
require.context?是?webpack?提供的一個(gè)API,用于創(chuàng)建context,即一組具有相同上下文的模塊,使用?require.context?可以方便地加載多個(gè)模塊,并且可以靈活地控制模塊的加載順序和依賴關(guān)系,本文給大家講解Vue中使用require.context自動(dòng)引入組件的方法,感興趣的朋友一起看看吧2024-01-01vue3報(bào)錯(cuò)提示找不到模塊“./XXX.vue”或其相應(yīng)的類型聲明問題
這篇文章主要介紹了vue3報(bào)錯(cuò)提示找不到模塊“./XXX.vue”或其相應(yīng)的類型聲明問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06el-date-picker設(shè)置日期默認(rèn)值兩種方法(當(dāng)月月初至月末)
這篇文章主要給大家介紹了關(guān)于el-date-picker設(shè)置日期默認(rèn)值(當(dāng)月月初至月末)的相關(guān)資料,文中通過代碼示例將解決的辦法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Vue 頁面狀態(tài)保持頁面間數(shù)據(jù)傳輸?shù)囊环N方法(推薦)
vue router給我們提供了兩種頁面間傳遞參數(shù)的方式,一種是動(dòng)態(tài)路由匹配,一種是編程式導(dǎo)航,接下來通過本文給大家介紹Vue 頁面狀態(tài)保持頁面間數(shù)據(jù)傳輸?shù)囊环N方法,需要的朋友可以參考下2018-11-11vue前端實(shí)現(xiàn)導(dǎo)出頁面為word的兩種方法代碼
在前端開發(fā)中我們常常需要將頁面頁面為word文件,這篇文章主要給大家介紹了關(guān)于vue前端實(shí)現(xiàn)導(dǎo)出頁面為word的兩種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04