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 相关文章推荐
jQuery实战之品牌展示列表效果
Apr 10 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
Jan 23 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
详解Js中的模块化是如何实现的
Oct 18 Javascript
Vue异步加载about组件
Oct 31 Javascript
详解如何用babel转换es6的class语法
Apr 03 Javascript
解决linux下node.js全局模块找不到的问题
May 15 Javascript
详解Angular操作cookies方法
Jun 01 Javascript
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 Javascript
element跨分页操作选择详解
Jun 29 Javascript
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
JS前端使用canvas实现扩展物体类和事件派发
Aug 05 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
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
Vue看了就会的8个小技巧
2021/01/21 Vue.js
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Django框架安装方法图文详解
2019/11/04 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
应届毕业生个人自我评价
2013/09/20 职场文书
大学生作弊检讨书
2014/09/11 职场文书
政风行风整改方案
2014/10/25 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
工资证明范本
2015/06/12 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技