当前位置: 移动技术网 > IT编程>开发语言>JavaScript > Vue将props值实时传递 并可修改的操作

Vue将props值实时传递 并可修改的操作

2020年08月17日  | 移动技术网IT编程  | 我要评论
我们都知道props值是只读的,子组件内不可直接修改,会报错滴但是很多时候这个值是需要子组件主动修改的,一般我们会使用this.$emit()去修改,但比较麻烦下面这种方式可以实现:1、父组件实时修改

我们都知道props值是只读的,子组件内不可直接修改,会报错滴

但是很多时候这个值是需要子组件主动修改的,一般我们会使用this.$emit()去修改,但比较麻烦

下面这种方式可以实现:

1、父组件实时修改props值时,子组件可以接收到改变

2、子组件可主动修改该值

<div>{{realvalue}}</div>

 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值的,会报【invalid default value for prop “defaultprop”: props with type object/array must use a factory function to return the default value.】错误,修正方法如下

defaultprop: {
 type: object,
 default: function(){
  return {
   children: 'children',
   label: 'name'
  }
 }
},

以上这篇vue将props值实时传递 并可修改的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网