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 相关文章推荐
Prototype使用指南之base.js
Jan 10 Javascript
prototype Element学习笔记(篇二)
Oct 26 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
某人初学javascript的时候写的学习笔记
Dec 30 Javascript
extjs3 combobox取value和text案例详解
Feb 06 Javascript
jQuery操作元素css样式的三种方法
Jun 04 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
jQuery的Read()方法代替原生JS详解
Nov 08 Javascript
vue的事件绑定与方法详解
Aug 16 Javascript
vue axios 在页面切换时中断请求方法 ajax
Mar 05 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牛逼的面试题分享
2013/01/18 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
yii2安装详细流程
2018/05/23 PHP
JavaScript中setInterval的用法总结
2013/11/20 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
python学习必备知识汇总
2017/09/08 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
python中xlutils库用法浅析
2020/12/29 Python
python实现图片转字符画的完整代码
2021/02/21 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
会计实习生自我鉴定
2013/12/12 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
无毒社区工作方案
2014/05/23 职场文书
班级课外活动总结
2014/07/09 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
承诺函范文
2015/01/21 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
会计做账心得体会
2016/01/22 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
php将xml转化对象的实例详解
2021/11/17 PHP
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL