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代码
Aug 09 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
JS OffsetParent属性深入解析
Jan 13 Javascript
JQuery对ASP.NET MVC数据进行更新删除
Jul 13 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
Jul 26 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
微信小程序 this.triggerEvent()的具体使用
Dec 10 Javascript
uni-app 自定义底部导航栏的实现
Dec 11 Javascript
js实现模拟购物商城案例
May 18 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
一个用于网络的工具函数库
2006/10/09 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
php类常量用法实例分析
2015/07/09 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
为数据添加append,remove功能
2006/10/03 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
layui-select动态选中值的例子
2019/09/23 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python实现的最近最少使用算法
2015/07/10 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
python在文本开头插入一行的实例
2018/05/02 Python
python3实现逐字输出的方法
2019/01/23 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
Pycharm Git 设置方法
2020/09/15 Python
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
小学安全汇报材料
2014/08/14 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
学生会自荐信
2019/05/16 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python