Vue computed计算属性的使用方法


Posted in Javascript onJuly 14, 2017

computed

computed:相当于method,返回function内return的值赋值在html的DOM上。但是多个{{}}使用了computed,computed内的function也只执行一次。仅当function内涉及到Vue实例绑定的data的值的改变,function才会从新执行,并修改DOM上的内容。

computed和method的对比

<div id="example">
 {{ message.split('').reverse().join('') }}
</div>

这个是vue官网一直拿来作为例子的代码。在{{}}可以很方便的放入单个表达式,但是当一个HTML的DOM里面存在太多的表达式,程序会变得很笨重难于维护。

html

<div id="app9">
  9、method与computed的区别<br/>
  fullName<br/>
  {{fullName}}<br/>
  fullName2<br/>
  {{fullName}}<br/>
  fullNameMethod<br/>
  {{getFullName()}}<br/>
  fullNameMethod2<br/>
  {{getFullName()}}<br/>
</div>

js

var app9 = new Vue({
  el: '#app9',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  methods:{
    getFullName:function () {
      console.log("执行了methods")
      return this.firstName+" " +this.lastName;
    }
  },
  computed: {
    fullName: function () {
      console.log("执行了computed")
      return this.firstName + ' ' + this.lastName
    }
  }
})
setTimeout('app9.firstName="Foo2"',3000);

控制台输出的结果

执行了computed
执行了methods
执行了methods
执行了computed
执行了methods
执行了methods 

由此可见使用computed,function只会执行一次。当Vue实例中绑定的data数据改变的时候,computed也相对应的只改变一次。

相同点:在以上代码中,两个p标签都会打印出同样被反转的Hello。

不同点:
使用了methods的:HTML中,每一个调用了Vue的methods的方法,都需要执行一遍reversedMessage()这个方法;
而使用computed计算属性的,只执行一遍将结果保存在缓存中。

computed和watch的对比

html

<div id="demo">{{ fullName }}</div>

js

var vm = new Vue({
 el: '#demo',
 data: {
 firstName: 'Foo',
 lastName: 'Bar',
 fullName: 'Foo Bar'
 },
 watch: {
 firstName: function (val) {
  this.fullName = val + ' ' + this.lastName
 },
 lastName: function (val) {
  this.fullName = this.firstName + ' ' + val
 }
 }
})
var vm = new Vue({
 el: '#demo',
 data: {
 firstName: 'Foo',
 lastName: 'Bar'
 },
 computed: {
 fullName: function () {
  return this.firstName + ' ' + this.lastName
 }
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于Blog顶部的滚动导航条代码
Sep 25 Javascript
js的alert弹出框出现乱码解决方案
Sep 02 Javascript
Ext GridPanel加载完数据后进行操作示例代码
Jun 17 Javascript
JavaScript使用循环和分割来替换和删除元素实例
Oct 13 Javascript
JavaScript将字符串转换为整数的方法
Apr 14 Javascript
解决jquery实现的radio重新选中的问题
Jul 03 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
Jun 01 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
Jul 05 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
Dec 31 Javascript
原生js编写2048小游戏
Mar 17 Javascript
详解如何在vue中使用sass
Jun 21 Javascript
关于AOP在JS中的实现与应用详解
May 06 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 #Javascript
JS实现数组去重方法总结(六种方法)
Jul 14 #Javascript
Javascript中Promise的四种常用方法总结
Jul 14 #Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 #Javascript
详解VUE中v-bind的基本用法
Jul 13 #Javascript
vue通过watch对input做字数限定的方法
Jul 13 #Javascript
深入理解vue $refs的基本用法
Jul 13 #Javascript
You might like
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
python之信息加密题目详解
2019/06/26 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
大学毕业感言
2014/01/10 职场文书
学生喝酒检讨书
2014/02/06 职场文书
学校元旦晚会方案
2014/02/19 职场文书
网络编辑职责
2014/03/01 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
高老头读书笔记
2015/06/30 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js