Vue中计算属性computed的示例解读


Posted in Javascript onJuly 26, 2017

计算属性

表达式是非常便利的,但是它们实际上只用于简单的运算。在模板中放入太多的逻辑会让模板过重且难以维护,所以引入了计算属性computed,将复杂的逻辑放入计算中进行处理,同时computed有缓存功能,防止复杂计算逻辑多次调用引起的性能问题。

computed原理

computed的属性reversedMessage在data中会有一个对我们不可见的cacheReversedMessage属性对应

cacheReversedMessage的值是根据其绑定的data中的message来决定的 获取reversedMessage会返回

cacheReversedMessage的值 message更新之后会立马调用reversedMessage的get方法去给cacheReversedMessage赋值(无论reversedMessage在dom中是否使用) cacheReversedMessage的值发生变化时,相应的dom也会发生变化

注意:computed中的属性和data中的属性名字不能相同,一个属性要么在data里;要么在computed里,computed里的属性要跟data中的配合使用,当data属性发生变化时才会调用get方法更新reversedMessage的值,否则get方法即使返回一个随机数,reversedMessage的值也不会变。

示例代码

computed相当于属性的一个实时计算,如果实时计算里关联了对象,那么当对象的某个值改变的时候,同事会出发实时计算。

比如:

<body id="content">

 <parent :childrens="childrens"></parent>

</body>

<!-- 这个测试主要想证明: 对于计算属性里如果关联对象,即使对象不是组件作用域内的,当对象在外部改变了某个属性,同样会出发计算属性的方法-->

<script>

 var parent = Vue.extend( {

 props: {

  childrens: ''

 },

 template: '<div >{{age}}</div>',

 data: function() {

  return {

  name: '',

  age: 18

  };

 },

 computed: {

  age: function() {

  return this.childrens.age +10;

  }

 },

 created: function() {

  var _parent = this.$parent;

  this._set = {};

  this._set = _parent; 

 }

 } );

 var vm = new Vue( {

 el: 'body',

 data: {

  childrens: {

  name: '小强',

  age: 20,

  sex: '男'

  }

 },

 components: {

  'parent': parent

 }

 } );

 vm.$data.childrens.age = 10;

</script>

vm.$data.childrens.age这个值改变的时候,动态触发computed里的age属性计算,最后显示到页面的结果是:20。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery实现鼠标滑过小图时显示大图的方法
Jan 14 Javascript
jQuery插件expander实现图片翻转特效
May 21 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
JavaScript Math.round() 方法
Dec 18 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
JS实现json对象数组按对象属性排序操作示例
May 18 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
vue-rx的初步使用教程
Sep 21 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 #Javascript
Bootstrap datepicker日期选择器插件使用详解
Jul 26 #Javascript
js实现图片轮播效果学习笔记
Jul 26 #Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 #Javascript
vue上传图片组件编写代码
Jul 26 #Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
Jul 26 #Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 #Javascript
You might like
PHP分页详细讲解(有实例)
2013/10/30 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python实现的生成word文档功能示例
2019/08/23 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
网络工程师的自我评价
2013/10/02 职场文书
青年文明号服务承诺
2014/03/31 职场文书
产品质量保证书
2014/04/29 职场文书
党员演讲稿
2014/09/04 职场文书
铣工实训报告
2014/11/05 职场文书
长城的导游词
2015/01/30 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
Spring中的@Transactional的工作原理
2022/06/05 Java/Android