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学习笔记二 实现可编辑的表格
Apr 09 Javascript
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 Javascript
jquery禁用右键示例
Apr 28 Javascript
网站接入QQ登录的两种方法
Jul 22 Javascript
JavaScript数组Array对象增加和删除元素方法总结
Jan 20 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
jquery+php实现滚动的数字特效
Nov 29 Javascript
JQuery datepicker 用法详解
Dec 25 Javascript
vuejs使用FormData实现ajax上传图片文件
Aug 08 Javascript
jquery层次选择器的介绍
Jan 18 jQuery
Angular封装表单控件及思想总结
Dec 11 Javascript
vscode 调试 node.js的方法步骤
Sep 15 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中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
JavaScript函数详解
2014/11/17 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
Python读写ini文件的方法
2015/05/28 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
个性大学生自我评价
2013/12/04 职场文书
成品仓管员岗位职责
2013/12/11 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
普通员工辞职信
2014/01/17 职场文书
实习评语大全
2014/04/26 职场文书
2014年中秋寄语
2014/08/11 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
现实表现证明材料
2015/06/19 职场文书
行为习惯主题班会
2015/08/14 职场文书
2016七夕情人节感言
2015/12/09 职场文书
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技