vue组件在方法中使用props值,vue props传值不随着变化而变化

  vue组件在方法中使用props值,vue props传值不随着变化而变化

  本文主要介绍了vue组件的props属性无法监控值变化的问题,有很好的参考价值,希望对大家有所帮助。如有错误或不足之处,请不吝赐教。

  

目录

   props属性不能监听值的变化。道具听变的几种方式。应用场景1 .计算的计算属性2 .方法方法3 .观察监听器

  

props属性监听不到值变化问题

  写项目的时候,遇到了一个问题。父组件传递给子组件的道具,但子组件无法监控更改。

  看vue文档,了解到watch有深度监控的方法。

  阅读vue文档如下代码。=》

  var vm=new Vue({

  数据:{

  答:1,

  乙:2,

  c: 3,

  d: 4,

  e: {

  女:{

  g: 5

  }

  }

  },

  观察:{

  答:函数(val,oldVal) {

  console.log(新:%s,旧:%s ,val,oldVal)

  },

  //方法名称

  b:“某种方法”,

  //当任何被侦听对象的属性发生更改时,都会调用此回调,无论它的嵌套有多深。

  丙:{

  处理程序:函数(val,oldVal) { /*.*/},

  深:真的

  },

  //这个回调会在监听开始后立即调用。

  丁:{

  处理程序: someMethod ,

  即时:正确

  },

  //可以传入回调数组,它们会被逐个调用

  电子版:[

  手柄1 ,

  函数handle2 (val,oldVal) { /*.*/},

  {

  处理程序:函数handle3 (val,oldVal) { /*.*/},

  /* .*/

  }

  ],

  //观察vm.e.f的值:{g: 5}

   e.f: function (val,oldVal) { /*.*/}

  }

  })

  vm.a=2 //=新:2,旧:1

  此时,您可以监视对象内部的属性更改。

  怀疑,项目中的单层对象,没有嵌套对象,连变化都监控不到。

  践踏的一天。

  

props监听变化的几种方式

  

应用场景

  在vue中,亲子组件通过props传输数据。通常有以下几种情况:

  子组件显示父组件传递的道具。一般情况下,字符串子组件通过计算父组件的属性来获得某个值。子组件修改父组件传递的属性。

  

1.computed 计算属性

  使用场景:当pros传递的值不能直接使用时,可以使用calculated属性。

  比如拼接省市三个字段后需要显示一个完整的地址。

  计算基于依赖关系进行缓存。当props不变时,多次访问addrese计算属性将立即返回结果,而不必再次执行计算。

  道具:{

  省份:字符串,//省份

  城市:字符串,//城市

  面积:字符串//面积

  },

  计算值:{

  地址(){

  返回“{ this . province } { this . city } { this . area }”

  }

  }

  

2.methods 方法

  上述计算属性也可以通过方法实现,但是方法不会被缓存,通常用方法来处理业务逻辑。

  

3.watch 侦听器

  使用场景:使用传递的道具作为初始值,比如城市选择列表的默认城市。当我们想要选择一个城市时,改变这个值。

  单向数据流

  对父属性的更新向下传递到子组件。

  当我们需要修改子组件中父组件传递的道具时,如果我们直接修改,vue会报错,因为如果子组件直接修改父组件的道具,会让应用的数据流难以理解。

  解决方案

  为了不直接修改props的值,可以在data中用props初始化一个数据属性,以后再修改这个数据属性。

  但这将导致父组件改变时data属性不更新(注意:仅针对基本类型,如果是引用类型,仍然会改变。因为引用类型的内存地址没有改变)

  此时,为了更新这个数据属性,您需要使用一个监听器来监听props中的变化。

  深度监听

  使用场景:当某个值发生变化时,执行异步请求。

  计算和方法此时不合适。

  基本类型手表:{

  msg(newV,oldV) {

  //做点什么

  console.log(newV,oldV)

  }

  }

  类型1。计算属性(推荐)

  引用类型内部的一个字段是通过计算属性得到的,然后用监听器来监控字段的变化。

  道具:{

  配置:对象

  },

  计算值:{

  isShow() {

  返回this.config.role.isShow

  }

  },

  观察:{

  isShow(newV,oldV) {

  //做点什么

  console.log(newV,oldV)

  }

  }

  2 .深度

  道具:{

  配置:对象

  },

  观察:{

  isShow:{ //深度监听,可监听到对象、数组的变化

  处理器(新的,旧的){

  //做点什么,可使用这

  console.log(newV,oldV)

  },

  深:真的

  }

  },

  监听对象中的某个值

  道具:{

  选项:对象

  },

  观察:{

  option.text(newVal,oldVal){

  console.log(newVal,old val);

  }

  }

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: