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实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
Oct 13 Javascript
使用js检测浏览器的实现代码
May 14 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 Javascript
Javascript中的return作用及javascript return关键字用法详解
Nov 05 Javascript
plupload+artdialog实现多平台上传文件
Jul 19 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
Jan 22 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
vue实现带过渡效果的下拉菜单功能
Feb 19 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
浅谈JavaScript节流和防抖函数
Aug 25 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 生成文字png图片的代码
2011/04/17 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
浅谈django orm 优化
2018/08/18 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
python序列类型种类详解
2020/02/26 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
python 自动识别并连接串口的实现
2021/01/19 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
网络方面基础面试题
2012/11/16 面试题
研发工程师的岗位职责
2013/11/18 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
音乐之声观后感
2015/06/04 职场文书
锦旗赠语
2015/06/23 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
初中美术教学反思
2016/02/17 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电