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 对象成员的可见性说明
Oct 16 Javascript
Javascript执行效率全面总结
Nov 04 Javascript
javascript解三阶幻方(九宫格)
Apr 22 Javascript
详解JavaScript中localStorage使用要点
Jan 13 Javascript
快速掌握Node.js模块封装及使用
Mar 21 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
May 25 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
js事件on动态绑定数据,绑定多个事件的方法
Sep 15 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 Javascript
Vue.js的模板语法详解
Feb 16 Javascript
深度解读vue-resize的具体用法
Jul 08 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
mysql总结之explain
2012/02/27 PHP
跟我学Laravel之路由
2014/10/15 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
用javascript获取textarea中的光标位置
2008/05/06 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python监控键盘输入实例代码
2018/02/09 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
python实现俄罗斯方块
2018/06/26 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
新手学python应该下哪个版本
2020/06/11 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
股东协议书
2014/04/14 职场文书
机关办公室岗位职责
2014/04/16 职场文书
投资建议书模板
2014/05/12 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
员工辞退通知书
2015/04/17 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
创业计划书之个人工作室
2019/08/22 职场文书