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 相关文章推荐
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
Jun 28 Javascript
js实现在页面上弹出蒙板技巧简单实用
Apr 16 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
AngularJS service之select下拉菜单效果
Jul 28 Javascript
ReactJS实现表单的单选多选和反选的示例
Oct 13 Javascript
vue2.0实现音乐/视频播放进度条组件
Jun 06 Javascript
微信小程序常用赋值方法小结
Apr 30 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
Oct 15 Javascript
vue-next/runtime-core 源码阅读指南详解
Oct 25 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
原生js+css实现tab切换功能
Sep 17 Javascript
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设计模式 Observer(观察者模式)
2011/06/26 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
php比较相似字符串的方法
2015/06/05 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
yii权限控制的方法(三种方法)
2015/12/28 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
做web开发 先学JavaScript
2014/12/12 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
js实现拖拽上传图片功能
2017/08/01 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
python django集成cas验证系统
2014/07/14 Python
Python编程中的for循环语句学习教程
2015/10/14 Python
python中星号变量的几种特殊用法
2016/09/07 Python
python3 shelve模块的详解
2017/07/08 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
小区门卫工作职责
2013/12/14 职场文书
实习生自我评价
2014/01/18 职场文书
网络研修随笔感言
2014/02/17 职场文书
敬老院标语
2014/06/27 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书