Vue将props值实时传递 并可修改的操作
我们都知道props值是只读的,子组件内不可直接修改,会报错滴
但是很多时候这个值是需要子组件主动修改的,一般我们会使用this.$emit()去修改,但比较麻烦
下面这种方式可以实现:
1、父组件实时修改props值时,子组件可以接收到改变
2、子组件可主动修改该值
{{RealValue}}props:["value"], watch:{ value(v){ this.RealValue=v } }, data(){ return{ RealValue:this.value } }
原理很简单,就是使用一个RealValue作为实际显示的参数,并且使用watch实时把value值传给他
PS:这里的值是字符串格式,如果value是对象或者数组,watch处要写成:
watch:{ value:{ deep:true, handler(v){ this.RealValue=v } } },
补充知识:vue组件内数值做watch监听,首次监听不到的问题
在vue中会使用很多子组件,有时因为组件的类型等原因会导致数据监听不到的情况,下面列举几种问题和解决方法
子组件内数据首次监听不到时,可以使用【immediate】方法,其值是true或false;immediate:true代表如果在wacth里声明了之后,就会立即先去执行里面的handler方法
watch:{ uploadImageUrl:{ immediate:true, handler:function(newval){ this.uploadShowImageUrl=newval; } } },
子组件的深度监听函数【deep】,其值是true或false;确认是否深入监听。deep的意思就是深入观察,监听器会一层层的往下遍历,给对象的所有属性都加上这个监听器(受现代JavaScript的限制(以及废弃Object.observe),Vue不能检测到对象属性的添加或删除)
watch:{ uploadImageUrl:{ deep:true, handler:function(newval){ this.uploadShowImageUrl=newval; } } },
给组件内的props为对象的数据设置默认值
如果prop中接收的数据为对象或者数组类型,是不可以像字符串等【default:''】直接指定default值的,会报【Invaliddefaultvalueforprop“defaultProp”:PropswithtypeObject/Arraymustuseafactoryfunctiontoreturnthedefaultvalue.】错误,修正方法如下
defaultProp:{ type:Object, default:function(){ return{ children:'children', label:'name' } } },
以上这篇Vue将props值实时传递并可修改的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。