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下为Event handler传递动态参数的代码
Jan 06 Javascript
javascript中RegExp保留小数点后几位数的方法分享
Aug 13 Javascript
location.href用法总结(最主要的)
Dec 27 Javascript
jQuery中scrollLeft()方法用法实例
Jan 16 Javascript
angular双向绑定模拟探索
Dec 26 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
Vue.js实现文章评论和回复评论功能
May 30 Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 Javascript
JavaScript生成指定范围的时间列表
Mar 19 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
Sep 11 Javascript
vant组件中 dialog的确认按钮的回调事件操作
Nov 04 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中英混合字符串截取函数代码
2011/07/17 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
JavaScript效率调优经验
2009/06/04 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
整理Python中的赋值运算符
2015/05/13 Python
Python监控主机是否存活并以邮件报警
2015/09/22 Python
python使用pymysql实现操作mysql
2016/09/13 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
Python requests模块session代码实例
2020/04/14 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
学院领导推荐信
2013/10/30 职场文书
学校安全责任书
2014/04/14 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
城南旧事读书笔记
2015/06/29 职场文书
python xlwt模块的使用解析
2021/04/13 Python