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 相关文章推荐
JS 控制CSS样式表
Aug 20 Javascript
jquery each()源代码
Feb 14 Javascript
自制基于jQuery的智能提示插件一枚
Feb 18 Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 Javascript
event.X和event.clientX的区别分析
Oct 06 Javascript
js 字符串转换成数字的三种方法
Mar 23 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
javascript如何实现暂停功能
Nov 06 Javascript
JS继承与闭包及JS实现继承的三种方式
Oct 15 Javascript
Node.js使用Koa搭建 基础项目
Jan 08 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 Javascript
Vue filter 过滤器、以及在table中的使用介绍
Sep 07 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中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
js转义字符介绍
2013/11/05 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
jquery replace方法去空格
2017/05/08 jQuery
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python数据类型详解(二)列表
2016/05/08 Python
常见的python正则用法实例讲解
2016/06/21 Python
对python函数签名的方法详解
2019/01/22 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
学期自我鉴定范文
2013/10/01 职场文书
工程监理应届生求职信
2013/11/09 职场文书
大学四年规划书范文
2013/12/27 职场文书
单身联谊活动方案
2014/01/29 职场文书
机关门卫制度
2014/02/01 职场文书
法制报告会主持词
2014/04/02 职场文书
竞选班委演讲稿
2014/04/28 职场文书
捐助感谢信
2015/01/22 职场文书
2015年植树节活动总结
2015/02/06 职场文书
技术员个人工作总结
2015/03/03 职场文书
污水处理保证书
2015/05/09 职场文书
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python