vue父子组件同步数据,vue如何在组件内部实现一个双向数据绑定
组件之间的数值传递经常在Vue项目中使用。实现方式有很多种,但原理基本相同。本文将介绍Vue父子组件数据单向绑定和Vue父子组件数据双向绑定的对比,从而认识双向绑定。
:
目录
1.父子组件1的单向值传输。从父母到子女的价值转移
2.从子代到父代的价值转移2。父子组件数据的双向绑定实现思路:
父 向 子 组件传值:使用道具属性。(props是property[ property]的复数缩写)子 向 父 组件传值:使用自定义事件。
一、父子组件单向传值
1、父向子传值
将该值传递给父子组件。子组件收到数据后,会将其保存到自己的变量中。
//父组件写入
cld :numP=num /cld
//子组件定义和数据
组件:{
cld:{
模板:“#child”,
道具:{
numP:数字
},
}
}
//子组件内容
模板id=子级
差异
{{ numP }}
/div
/模板
Props用于接收父组件传递的值。写道具的方法有很多,比如:
//模式1:直接接收数据
道具:[ numP ]
//模式二:添加类型限制。
道具:[
numP:数字
]
//模式3:添加默认值
道具:[
numP: {
类型:数量,
默认值:0
}
]
//模式四:有必要限制数值吗?
道具:[
numP: {
类型:数量,
默认值:0,
Require:true //添加必需的值。如果没有传递该值,将会报告一个错误。
}
]
//方式五:采取对象的形式
道具:{
numP: {
类型:数量,
默认值:0,
}
}
2、子向父传值
向子父组件传递值主要是通过自定义事件。具体例子如下:
//父组件内容
差异
子组件获取的数据{{getNum}}
CLD:num= num @ accept= getNumC /CLD
/div
//父组件方法
方法:{
getNumC(数据){
This.getNum=data //接收子组件传输的数据
}
},
//子组件定义
组件:{
cld:{
模板:“#child”,
data(){
返回{
NumC:1314 //子组件数据定义
}
},
已安装(){
这个。$ emit (accept ,this . numc)//触发自定义事件
}
}
},
二、父子组件数据双向绑定
vue的数据是单向流动的,Vue中从来没有任何双向绑定。v-model实现的双向绑定只是语法糖。
方式1:使用watch在父组件和子组件之间进行双向数据绑定,具体实例如下:
div id=应用程序
Br{{num}}
输入类型=text v-model=numbr
CLD:num= num @ accept= getNumC /CLD
/div
//子组件内容
模板id=子级
差异
Br{{childNum}}
输入类型=text v-model=childNum /
/div
/模板
!-亲子组件通信-
const app=new Vue({
埃尔: #app ,
数据:{
数字:“520”,
},
方法:{
getNumC(数据){
this.num=数据
}
},
组件:{
cld:{
模板:“#child”,
道具:{
数字:字符串
},
data(){
返回{
childNum:0,
}
},
观察:{
number:function(){
this . child num=this . num
},
childNum:function(){
这个。$emit(accept ,this.childNum)
}
},
已安装(){
this . child num=this . num
}
}
}
})
方式2:.同步修改器实现双向绑定
提供的函数。vue1.x中的sync修改器。当子组件用。同步,更改也将同步到父组件中绑定的值。这很方便,但也会带来问题,因为它破坏了单向数据流。(数据自上而下流动,事件自下而上)
CLD:num . sync= num /CLD
//将扩展到:
CLD:number= bar @ update:number=" val=bar=val "/
当一个组件需要更新num的值时,它需要触发一个更新事件:
这个。$ emit( update:number ,new value);
使用具体实例如下:
//父组件
父亲:foo . sync= foo /父亲
//子组件
道具:[foo],
data() {
返回{
new foo:this . foo;
}
},
方法:{
add:function(){
this.newMsg=10
这个。$emit(update:foo ,this . new foo);
}
}
关于前端框架Vue父子组件数据双向绑定的这篇文章到此为止。关于Vue父子组件数据双向绑定的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。