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级联下拉菜单以及AJAX数据验证核心代码
May 10 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
jQuery中:eq()选择器用法实例
Dec 29 Javascript
JQuery中DOM加载与事件执行实例分析
Jun 13 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
Sep 12 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
使用百度地图实现地图网格的示例
Feb 06 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
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
adodb与adodb_lite之比较
2006/12/31 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
Python注释详解
2016/06/01 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
python脚本开机自启的实现方法
2019/06/28 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
如何写你的创业计划书
2014/01/07 职场文书
历史学专业求职信
2014/06/19 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS