1 计算属性
1.1 模板内的表达式是非常便利的,但是它们实际上只用于简单的运算。
在模板中放入太多的逻辑会让模板过重且难以维护。
<div id="test1">
{{str.split('').reverse().join('')}}
</div> <script>
let app1 = new Vue({
el: '#test1',
data: {
str: 'hello world'
}
});
</script>
      这种写法的弊端:
在这种情况下,模板不再简单和清晰。在意识到这是反向显示 str 之前,
你不得不再次确认第二遍。当你想要在模板中多次反向显示 str 的时候,
问题会变得更糟糕。 这就是对于任何复杂逻辑,你都应当使用计算属性的原因。 1.2 基本计算属性
<div id="test2">
<p>原始的效果:{{str}}</p>
<p>反转后的效果:"{{reverse}}"</p>
</div> <script>
let app2 = new Vue({
el: '#test2',
data: {
str: 'hello world'
},
computed: {
//computed的getter
reverse: function () {
return this.str.split('').reverse().join('');
}
}
});
</script>
        这里声明了一个计算属性 reverse。
提供的函数将用作属性 vm.reverse 的 getter 。
可以打开浏览器的控制台,自行修改例子中的 app2 。 
app2.reverse 的值始终取决于 app2.str 的值。
可以像绑定普通属性一样在模板中绑定计算属性。
Vue 知道 app2.reverse 依赖于 app2.str ,因此当 app2.str 发生改变时,所有依赖于 app2.reverse 的绑定也会更新。
而且最妙的是我们已经以声明的方式创建了这种依赖关系:计算属性的 getter 是没有副作用,这使得它易于测试和推理。

1.3 计算缓存(计算属性) vs Methods 可以通过调用表达式中的 method 来达到同样的效果
<div id="test2">
<p>原始的效果:{{str}}</p>
<p>反转后的效果:"{{reverse}}"</p>
<p>反转后的效果:"{{reverseMe()}}"</p>
</div> <script>
let app2 = new Vue({
el: '#test2',
data: {
str: 'hello world'
},
computed: {
reverse: function () {
return this.str.split('').reverse().join('');
}
},
methods: {
reverseMe: function () {
return this.str.split('').reverse().join('');
}
}
});
</script>

我们可以将同一函数定义为一个 method 而不是一个计算属性。对于最终的结果,两种方式确实是相同的。
然而,不同的是计算属性是基于它们的依赖进行缓存的。
计算属性只有在它的相关依赖发生改变时才会重新求值。
这就意味着只要 str 还没有发生改变,多次访问 reverse 计算属性会立即返回之前的计算结果,而不必再次执行函数。 相比而言,只要发生重新渲染,method 调用总会执行该函数。
我们为什么需要缓存?假设我们有一个性能开销比较大的的计算属性 A ,它需要遍历一个极大的数组和做大量的计算。
然后我们可能有其他的计算属性依赖于 A 。
如果没有缓存,我们将不可避免的多次执行 A 的 getter!
如果你不希望有缓存,请用 method 替代。
1.4 Computed 属性 vs Watched 属性
Vue 确实提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:watch 属性。
当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS。
然而,通常更好的想法是使用 computed 属性而不是命令式的 watch 回调。 比较例子:
<div id="test4">{{fullName}}</div>
<div id="test5">{{fullName}}</div> <script>
let app4 = new Vue({
el: '#test4',
data: {
firstName: 'Jeson',
lastName: 'hu',
fullName: 'Jesonhu'
},
watch: {
firstName: function (val) {
this.fullName = val +' '+ this.lastName;
},
lastName: function (val) {
this.fullName = this.firstName +' '+ val;
}
}
}); let app5 = new Vue({
el: '#test5',
data: {
firstName: 'Jeson',
lastName: 'hu'
},
computed: {
fullName: function () {
return this.firstName +' '+ this.lastName;
}
}
});
</script>
1.5 计算 setter
计算属性默认只有 getter ,不过在需要时你也可以提供一个 setter
<div id="test6">{{fullName}}</div>

    <script>
let app6 = new Vue({
el: '#test6',
data: {
firstName: 'Jeson',
lastName: 'hu'
},
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]
}
}
}
});
</script>
    现在在运行 app6.fullName = 'John Doe' 时, setter 会被调用,
app6.firstName 和 app6.lastName 也相应地会被更新。 2 观察 Watchers
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的 watcher 。
这是为什么 Vue 提供一个更通用的方法通过 watch 选项,来响应数据的变化。
当你想要在数据变化响应时,执行异步操作或开销较大的操作,这是很有用的。
												

ch4-计算属性(表达式计算 computed methods watchers)的更多相关文章

  1. vue教程2-03 vue计算属性的使用 computed

    vue教程2-03 vue计算属性的使用 computed computed:{ b:function(){ //默认调用get return 值 } } ---------------------- ...

  2. LeetCode_p150_逆波兰表达式计算/后缀表达式计算

    有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说,表达式总会得出有效数值且不存在除 ...

  3. Vue.js 源码分析(六) 基础篇 计算属性 computed 属性详解

    模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护,比如: <div id="example">{{ messag ...

  4. vue.js计算属性 vs methods

    计算属性:Vue.js 模板内的表达式非常便利,但是缺点就是只能用于简单的运算,如果模板中有太多的逻辑运算会让模板不堪重负且难以维护.恰恰计算属性可以处理复杂的逻辑运算,也就是说对于任何复杂逻辑你都应 ...

  5. Vue之计算属性Computed和属性监听Watch,Computed和Watch的区别

    一. 计算属性(computed) 1.计算属性是为了模板中的表达式简洁,易维护,符合用于简单运算的设计初衷. 例如: <div id="app"> {{ myname ...

  6. computed计算属性

    在computed中,可以定义一些属性,这些属性 叫做计算属性.计算属性的本质是一个方法,只不过我们在使用的时候,把他们的名称当做属性来使用,并不会吧计算属性当做方法去调用.与methods平级. / ...

  7. 深入理解 Vue Computed 计算属性

    Computed 计算属性是 Vue 中常用的一个功能,我们今天来说一下他的执行过长 拿官网简单的例子来看一下: <div id="example"> <p> ...

  8. vue之computed(计算属性)

    所谓计算属性就是计算data里的数据属性. computed:实时监听的该功能. 即监听是否有修改(浏览器未打开时即开始监听了),监听的值有修改则添加 所监听的data数据属性变化了,自动实时修改. ...

  9. 计算属性computed

    computed 在Vue中有多种方法为视图设置值: 1.使用指令直接将数据值绑定到视图 2.使用简单的表达式对内容进行简单的转换 3.使用过滤器对内容进行简单的转换 除此之外,我们还可以使用计算属性 ...

随机推荐

  1. [ASP.NET MVC]笔记(四 UnobtruSive AJAX和客户端验证

    UnobtruSive AJAX和客户端验证 ASP.NET MVC 已经默认开启非侵入试js和客户端验证,在web.config可以看到如下配置: <configuration> < ...

  2. IOS学习【VMware 12 安装 Mac OS X 10.11】-Day1

    1.下载安装VMware 12 pro  (32位不能安装) 虚拟机 VM12密钥 5A02H-AU243-TZJ49-GTC7K-3C61N 2.unlock206 用于VMware 12识别tac ...

  3. ospf剩余笔记

    OSPF 流程图: 带宽 开销 10     100 100    19 1000   4 10000 2 区域的划分减少lsdb的大小 有利于网络管理员故障排除 网络故障不会影响到其他区域 邻接关系 ...

  4. ★10 个实用技巧,让Finder带你飞~

    10 个实用技巧,让 Finder 带你飞 Finder 是 Mac 电脑的系统程序,有的功能类似 Windows 的资源管理器.它是我们打开 Mac 首先见到的「笑脸」,有了它,我们可以组织和使用 ...

  5. 学会Git

    学会Git   目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式 ...

  6. 四则运算 WEB

    coding.net:https://git.oschina.net/ysh0904/WEB.git 一.需求分析 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算 ...

  7. 201521123007《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  8. dbda数据库类

    <?phpclass DBDA{ public $host="localhost";//服务器地址 public $uid="root";//用户名 pu ...

  9. geyear和getfullyear的区别

    getYear(),IE中获得正确年份,但有的浏览器获取的是当前年份-1900的值.而IE是当大于2000时,直接加上1900 getFullYear(),都是可以获得正确年份. 所以建议使用getF ...

  10. javascript中slice() splice() concat()操作数组的方法

    这三个操作数组,哪个返回一个新数组呢.上代码 splice()方法,用于插入,删除和替换. var arr=[1,2,3,4,5]; var arr1=arr.splice(1,3); console ...