前端框架Vue父子組件數(shù)據(jù)雙向綁定的實(shí)現(xiàn)
實(shí)現(xiàn)思路:
父 向 子 組件傳值:使用 props 屬性。( props 是property[屬性] 的復(fù)數(shù)簡(jiǎn)寫 )
子 向 父 組件傳值:使用自定義事件。
一、父子組件單向傳值
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:采用對(duì)象形式
props: {
numP: {
type:Number,
default:0,
}
}
2、子向父?jìng)髦?/h3>
子向父組件傳值,主要通過自定義事件進(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)容請(qǐng)搜索腳本之家以前的文章或繼續(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-01
vue3報(bào)錯(cuò)提示找不到模塊“./XXX.vue”或其相應(yīng)的類型聲明問題
這篇文章主要介紹了vue3報(bào)錯(cuò)提示找不到模塊“./XXX.vue”或其相應(yīng)的類型聲明問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
el-date-picker設(shè)置日期默認(rèn)值兩種方法(當(dāng)月月初至月末)
這篇文章主要給大家介紹了關(guān)于el-date-picker設(shè)置日期默認(rèn)值(當(dāng)月月初至月末)的相關(guān)資料,文中通過代碼示例將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
vue data有值,但是頁(yè)面{{}} 取不到值的解決
這篇文章主要介紹了vue data有值,但是頁(yè)面{{}} 取不到值的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Vue 頁(yè)面狀態(tài)保持頁(yè)面間數(shù)據(jù)傳輸?shù)囊环N方法(推薦)
vue router給我們提供了兩種頁(yè)面間傳遞參數(shù)的方式,一種是動(dòng)態(tài)路由匹配,一種是編程式導(dǎo)航,接下來通過本文給大家介紹Vue 頁(yè)面狀態(tài)保持頁(yè)面間數(shù)據(jù)傳輸?shù)囊环N方法,需要的朋友可以參考下2018-11-11
vue前端實(shí)現(xiàn)導(dǎo)出頁(yè)面為word的兩種方法代碼
在前端開發(fā)中我們常常需要將頁(yè)面頁(yè)面為word文件,這篇文章主要給大家介紹了關(guān)于vue前端實(shí)現(xiàn)導(dǎo)出頁(yè)面為word的兩種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04

