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实现代码
Oct 01 Javascript
jsonp原理及使用
Oct 28 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
JavaScript编写连连看小游戏
Jul 07 Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
Aug 02 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
Mar 01 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
Apr 17 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
vue弹出框组件封装实例代码
Oct 31 Javascript
JS 5种遍历对象的方式
Jun 16 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
基于initPHP的框架介绍
2013/04/18 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
python如何爬取个性签名
2018/06/19 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
django 外键创建注意事项说明
2020/05/20 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
linux系统都有哪些运行级别
2016/03/26 面试题
两则小学生的自我评价分享
2013/11/14 职场文书
运动会解说词100字
2014/01/31 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
教育实习指导教师评语
2014/12/31 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL