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 DOM 添加事件
Feb 14 Javascript
jquery下实现overlay遮罩层代码
Aug 25 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
js单向链表的具体实现实例
Jun 21 Javascript
javascript 获取HTML DOM父、子、临近节点
Jun 16 Javascript
在JavaScript中使用NaN值的方法
Jun 05 Javascript
基于jquery实现三级下拉菜单
May 10 Javascript
纯JavaScript手写图片轮播代码
Oct 20 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 jQuery
推荐几个不错的console调试技巧实现
Dec 20 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 Javascript
一文搞懂redux在react中的初步用法
Jun 09 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
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
python实现的简单FTP上传下载文件实例
2015/06/30 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
静心口服夜广告词
2014/03/20 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL