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 26 Javascript
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
javascript 写类方式之六
Jul 05 Javascript
jQuery学习笔记之jQuery选择器的使用
Dec 22 Javascript
javascript中onmouse事件在div中失效问题的解决方法
Jan 09 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
Mar 22 Javascript
JS构造函数与原型prototype的区别介绍
Jul 04 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
layui表格实现代码
May 20 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
Angular8 简单表单验证的实现示例
Jun 03 Javascript
ssm+vue前后端分离框架整合实现(附源码)
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
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
iview实现图片上传功能
2020/06/29 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
犯错检讨书
2014/02/21 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
地理科学专业自荐信
2014/09/01 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
你会写请假条吗?
2019/06/26 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL