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 eval和JSON之间的联系
Dec 31 Javascript
javascript 函数参数限制说明
Nov 19 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
js实现div的切换特效上一个下一个
Feb 11 Javascript
jQuery移除元素自动解绑事件实现思路及代码
May 31 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
Oct 29 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
js form表单input框限制20个字符,10个汉字代码实例
Apr 12 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错误提示及查错方法
2015/07/14 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
python抓取网页中的图片示例
2014/02/28 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
推荐信格式范文
2014/05/09 职场文书
党员承诺践诺书
2014/05/20 职场文书
个人安全生产责任书
2014/07/28 职场文书
升学宴演讲稿
2014/09/01 职场文书
会计师事务所实习证明
2014/11/16 职场文书
技术支持岗位职责
2015/02/13 职场文书
催款函范本大全
2015/06/24 职场文书
红歌会主持词
2015/07/02 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL