Vue项目中数据的深度监听或对象属性的监听实例


Posted in Javascript onJuly 17, 2020

众所周知,vue项目中对数据的监听,提供了一个很好的钩子watch,watch可以极其方便的监听我们常用数据类型值的变化,但通常当我们想监听一个对象中,某个属性值的变化时,很难达到我们预期的效果。根据vue的文档,不难发现,使用数据的深度监听来达到这一效果。具体实现如下:

watch: {
  evlist: {
  handler(val, oldVal) {
   this.isTeam = val.projectParty;
   this.pjtid = val.pjtid;
   this.isFinish = val.projectSelfValue;
  },
  deep: true
  },
 
 },

这其中,evlist是一个对象,val监听到变化后的值,oldVal是变化前的值。

补充知识:vue中的监听属性和计算属性

计算属性(computed)

vue中的计算属性是非常棒的东西,它兼具了逻辑和变量。可以让我们不再关注视图层,值关注代码的逻辑即可。至于数据如何展现则只需由Vue负责,不需要我们的参与。

所以如果在面临选择是使用计算属性还是监视属性的情况下,优先选择计算属性

<p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>

export default {
  data(){
   return { 
    message: 'Hello',
   }
  },
  computed: {
   reversedMessage: function () {
    return this.message.split('').reverse().join('');
   }
  }

可以看到我们使用的计算属性替代了模板内表达式的功能。所以,对于任何复杂逻辑,你都应当使用计算属性。而且计算属性让我们只关注于逻辑实现,至于后期的数据在界面上的表示形式则直接由Vue.js负责,读者可以看到我们并没有直接参与页面展示上面来

此外,传统的直接通过表达式求值的方式需要我们自行取值,而计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。也就是说,计算属性会直接从缓存拿值,并伴随着值的改变而改变。而传统的直接通过表达式求值的方式需要我们在拿值之前需要执行一次getter()函数

监听属性(watch)

监听属性其实质是一次异步回调,希望读者在想到使用监听属性之前多考虑能否采用计算属性来取代监听属性

对比同一个功能实现

//计算属性
computed: {
  fullName2: function () {
    return this.firstName + ' ' + this.lastName
  }
}
//监听属性
watch: {
   firstName: function (val) {
    this.fullName = val + ' ' + this.lastName
  },
  lastName: function (val) {
    this.fullName = this.firstName + ' ' + val
  }
}

可以看到计算属性的代码更加简洁也更加高效,而且就实现效果而言,明显计算属性会更好一点

以上这篇Vue项目中数据的深度监听或对象属性的监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
May 14 Javascript
JavaScript学习笔记整理_关于表达式和语句
Sep 19 Javascript
Vue.js bootstrap前端实现分页和排序
Mar 10 Javascript
微信JSAPI Ticket接口签名详解
Jun 28 Javascript
underscore之function_动力节点Java学院整理
Jul 11 Javascript
AngularJS模态框模板ngDialog的使用详解
May 11 Javascript
浅谈JS和jQuery的区别
Mar 27 jQuery
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
Electron vue的使用教程图文详解
Jul 05 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
Jul 26 jQuery
vue监听用户输入和点击功能
Sep 27 Javascript
JS异步宏队列与微队列原理区别详解
Jul 02 Javascript
解决vue无法侦听数组及对象属性的变化问题
Jul 17 #Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 #Javascript
Vue element-ui父组件控制子组件的表单校验操作
Jul 17 #Javascript
简单了解常用的JavaScript 库
Jul 16 #Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 #jQuery
浅谈js中的attributes和Attribute的用法与区别
Jul 16 #Javascript
JS自定义右键菜单实现代码解析
Jul 16 #Javascript
You might like
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
PHP小技巧之函数重载
2014/06/02 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
python识别验证码图片实例详解
2020/02/17 Python
Python unittest框架操作实例解析
2020/04/13 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
技校学生个人职业生涯规划范文
2014/03/03 职场文书
国王的演讲观后感
2015/06/03 职场文书
葬礼主持词
2015/07/02 职场文书
丧事答谢词大全
2015/09/30 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python
ant design vue的form表单取值方法
2022/06/01 Vue.js
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL