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. grep&正则表达式

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...

  2. SNS团队第四次站立会议(2017.04.25)

    一.当天站立式会议照片 本次会议主要内容:汇报工作进度,根据完成情况调整进度 二.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 相关数据库文件建立起来  完善数据库文件 龚晓婷 研 ...

  3. 201521123107 《Java程序设计》第9周学习总结

    第9周作业-异常 1.本周学习总结 2.书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什 ...

  4. 微信小程序view标签以及display:flex的测试

    一:testview.wxml,testview.js自动生成示例代码 //testview.wxml <view class="section"> <view ...

  5. 团队作业8----第二次项目冲刺(beta阶段)5.20

    Day2--5.20 1.每日讨论 会议内容:1.新成员乔桦和周迪慢慢了解项目. 2.组内负责主要编程的益靖对代码进行了大概的说明. 3.对昨天的工作进行了几点总结. 4.组长对每个成员的任务完成了分 ...

  6. 201521123033《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. answer: 1.2 使用常规方法总结其他上课内容. answer:学了继承以及各种关键字 2. 书面作业 1.注释的应用 使用类 ...

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

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

  8. Scrapy爬虫框架解析

    Scrapy框架解析 Scrapy框架大致包括以下几个组件:Scrapy Engine.Spiders.Scheduler.Item Pipeline.Downloader: 组件 Scrapy En ...

  9. net core 安装web模板

    ---恢复内容开始--- 今天想试试在Linux用C#开发WebAPI,查了下,要用: dotnet new -t Web 来建立工程,结果我试了下,出来这段: Invalid input switc ...

  10. 以下内容对于灵活修改textField中文本以及占位文本属性进行了完整的封装,加入项目中可以节约开发时间。

    textField对占位文本设置属性有限,在项目中需要改变占位文本的属性以及位置,需要自己对控件进行封装 封装方法如下: 在LDTextField.m 文件中: #import <UIKit/U ...