vue.js入门教程之计算属性


Posted in Javascript onSeptember 01, 2016

前言

计算属性是用来声明式的描述一个值依赖了其它的值。当你在模板里把数据绑定到一个计算属性上时,Vue 会在其依赖的任何值导致该计算属性改变时更新 DOM。这个功能非常强大,它可以让你的代码更加声明式、数据驱动并且易于维护。

模板中表达式非常便利,但是它们实际上只用于简单的操作。

模板是为了描述视图的结构,在模板中放入太多的逻辑会让模板过重且难以维护。

这就是为什么 Vue.js 将绑定表达式限制为一个表达式,

如果需要多于一个表达式的逻辑,应当使用计算属性。

来看这一个简单的例子

<div id="example">
 a={{ a }}, b={{ b }}
</div>

var vm = new Vue({ //之所以起名vm,是因为这其实是mvvm中的vm
 el: '#example',
 data: {
 a: 1
 },
 computed: {
 // 一个计算属性的 getter
 b: function () {
  // `this` 指向 vm 实例
  return this.a + 1
 }
 }
})

输出结果:

a=1,b=2

这里我们声明了一个计算属性 b。我们提供的函数将用作属性 vm.b的 getter。

console.log(vm.b) // -> 2
vm.a = 3
console.log(vm.b) // -> 3

你可以像绑定普通属性一样在模板中绑定计算属性。Vue 知道 vm.b 依赖于 vm.a,因此当 vm.a 发生改变时,依赖于 vm.b 的绑定也会更新。而且最妙的是我们是声明式地创建这种依赖关系:计算属性的 getter 是干净无副作用的,因此也是易于测试和理解的。

如果你想观察 Vue 实例上的数据变动,可以使用Vue.js 提供的一个方法 $watch

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

var vm = new Vue({
 data: {
 firstName: 'Foo',
 lastName: 'Bar',
 fullName: 'Foo Bar'
 }
})

vm.$watch('firstName', function (val) {
 this.fullName = val + ' ' + this.lastName
})

vm.$watch('lastName', function (val) {
 this.fullName = this.firstName + ' ' + val
})

不过上面的方法也可以使用computed实现:

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

这样写是不是更简单,没有多余的重复代码,官方也鼓励使用computed方法。

上面讲computed时,有提到该方法提供了默认的get方法,那么有没有set方法呢?

// ...
computed: {
 fullName: {
 // getter
 get: function () {
  return this.firstName + ' ' + this.lastName
 },
 // setter
 set: function (newValue) {
  var names = newValue.split(' ')
  this.firstName = names[0]
  this.lastName = names[names.length - 1]
 }
 }
}
// ...

如果我们调用 vm.fullName = 'John Doe'时,setter 就会被调用。vm.firstNamevm.lastName也会有相应更新。这个方法,在有些时候是很有用的。

总结

以上就是关于vue.js计算属性的全部内容,希望这篇文章对大家能有所帮助,小编还会陆续更新关于vue.js的内容,感兴趣的小伙伴们可以继续关注三水点靠木。

Javascript 相关文章推荐
用JS操作FRAME中的IFRAME及其内容的实现代码
Jul 26 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
js返回上一页并刷新的多种实现方法
Feb 26 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
Jun 09 Javascript
超棒的响应式布局jQuery插件Freetile.js
Nov 17 Javascript
js对象的复制继承实例
Jan 10 Javascript
JavaScript入门教程之引用类型
May 04 Javascript
vue-quill-editor实现图片上传功能
Aug 08 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
Apr 01 Javascript
详解ES6中的Map与Set集合
Mar 22 Javascript
微信小程序 搜索框组件代码实例
Sep 06 Javascript
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
AngularJs expression详解及简单示例
Sep 01 #Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
Sep 01 #Javascript
vue.js入门教程之基础语法小结
Sep 01 #Javascript
AngularJs directive详解及示例代码
Sep 01 #Javascript
AngularJs concepts详解及示例代码
Sep 01 #Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 #Javascript
AngularJs html compiler详解及示例代码
Sep 01 #Javascript
You might like
php+mysql事务rollback&amp;commit示例
2010/02/08 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
JavaScript表单常用验证集合
2008/01/16 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
TensorFlow损失函数专题详解
2018/04/26 Python
Python3.9新特性详解
2020/10/10 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
教育科学研究生自荐信
2013/10/09 职场文书
高二美术教学反思
2014/01/14 职场文书
逃课检讨书范文
2015/05/06 职场文书
行政复议决定书
2015/06/24 职场文书
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers
Python之matplotlib绘制折线图
2022/04/13 Python
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis