computed属性与methods、watched
一、计算属性
new Vue({
data: {
message: 'hello vue.js !'
},
computed: {
reverseMessage: function () {
return this.reverseMessage.split('').reverse().join('');
}
}
});
标签使用:
<span>Reversed Message: {{ reverseMessage }}</span>
结果: Reversed Message: ! sj.euv olleh
计算属性的使用是为了避免插值中使用复杂的计算而导致难以维护。
使用计算属性可以将最终的结果值放入到插值中去显示
还可以通过 vm.reverseMessage 来直接调用获取其值,由于 compted:{} 中 reverseMessage 的结果是与 vm.message 绑定的,因此只要message 发生变化其值也会立即发生变化。
二、Methods
组件中有个属性专门用来定义组件内所使用到的方法,即:methods,对象类型。
比如上面的例子:
new Vue({
data: {
message: 'hello vue.js !'
},
computed: {
reverseMessage: function () {
return this.reverseMessage.split('').reverse().join('');
}
},
methods: {
reverseMessage: function () {
return this.reverseMessage.split('').reverse().join('');
}
},
});
三、计算属性和 methods区别
计算属性和 methods 最大的区别就在于缓存机制。
method每调用一次就计算一次;computed只在msg更新时计算,计算结果存在缓存中。
计算属性是作为属性来使用的,只要其依赖的数据没发生变化它也不应该会有所变化(虽然其实现还是以函数形式),而对于 methods 其实是以函数形式定义并以函数形式调用,既然每次都是函数调用形式去获取值,那肯定会每次调用都会重新计算得出最新值返回。
两者使用场景:
- 计算属性:可以应对大型数据计算并且一般不会发生变动的数据,这样就避免了每次想要获取需要经过大量计算而又不会经常发生变化的值导致的每次都需要重新计算,消耗性能;
methods:适用于数据变化性比较大,经常变动的内容,也可替代计算属性来使用。
四、Computed 属性 vs Watched 属性
计算属性和观察属性区别在于,观察属性一次只能观察一个属性然后针对该属性的变化做出响应,而计算属性却不一样,它可以同时检测几个属性,通过这几个属性的值返回计算的结果。
比如:(分别通过观察属性和计算属性来实现:更新人物姓名)
1、Watched 属性
var data = {
firstName: 'li',
lastName: 'zc',
fullName: 'lizc',
};
// 观察属性,观察的属性发生变化,会做出响应(比如:改变其他属性的值)
watch: {
firstName: function (newValue) {
console.log('firstName ---------- new: ' + newValue);
this.fullName = newValue + ' ' + this.lastName;
},
lastName: function (newValue) {
console.log('lastName ---------- new: ' + newValue);
this.fullName = this.firstName + ' ' + newValue;
},
},
这里对 firstName 和 lastName 分别进行了观察,一旦有改变发生,就会去更新全名:fullName 值;
2、计算属性
通过计算属性的特性:只要被绑定的属性值不发生变化计算结果就不会变,被绑定的属性发生变化计算结果会根据变化后的最新值去计算最新的结果。
可以更方便的去实现上面通过 watch 属性来刷新全名的功能。
// 数据
var data = { firstName: 'li',
lastName: 'zc',
// fullName: 'lizc', 这里就不需要设置这个属性了,直接从计算属性结果中获取
};
// 计算属性,只要绑定的属性不变,会先使用缓存的值
computed: { fullName: function () {
return this.firstName + ' ' + this.lastName;
},
},
3、两者通用的标签书写方式:
<h1>Compted 属性 vs Watched 属性</h1>
<label>Fist Name: </label><input type="text" v-model="firstName"><br/>
<label>Last Name: </label><input type="text" v-model="lastName"><br/>
<label>计算属性:</label><span>{{ fullName }}</span><br/>
<label>观察属性:</label><span>{{ fullName }}</span><br/>
上面的计算和观察属性中的 fullName 有所不同
前者标签内的 fullName 插值使用的是 compted 属性中的 fullName;
后者标签内的 fullName 插值使用的是 data 数据中的 fullName 属性;
最终结果其实都是一样的,见效果图:

五、计算属性的 setter
默认情况下计算属性是只有 getter 的,但是我们可以自己添加 setter
比如:
需要注意的是,这里 fullName 不能再是函数声明形式了,而需要采用对象方式
// 为计算属性添加 setter
fullName: { // fullName: function (){} => fullName: {} get: function () {
return this.firstName + ' ' + this.lastName;
}, set: function (newValue) {
var name = newValue.split(' '); this.firstName = name[];
this.lastName = name[name.length - ];
} // return this.firstName + ' ' + this.lastName;
},
这样我们也可以通过 vm.fullName = 'li zc 方式去修改绑定的属性了。
setter 里面可以做一些自定义的需求等等。
计算属性有个好处就是,可以同时检测多个属性并且可以根据这多个属性通过一定方式计算得出结果。
computed属性与methods、watched的更多相关文章
- vue.js初探:计算属性和methods
在vue.js中,计算属性和methods方法的函数相同时,两者的最终执行结果都是相同的.然而不同的是,计算属性是基于它的依赖缓存.计算属性只有在它的相关依赖发生改变时才会重新取值.这就意味着只要 m ...
- sau交流学习社区—vue总结:使用vue的computed属性实现监控变量变化,使用vue的watch属性监控变量变化从而实现其他业务
有时候遇到这么个需求,输入框为空的时候,请求一遍接口,如果输入框不为空的时候,需要点击搜索按钮请求接口. 同步sau交流学习社区:https://www.mwcxs.top/page/464.html ...
- Vue中的computed属性
阅读Vue官网的过程中,对于计算属于与监听器章节的内容有点理解的不清晰:https://cn.vuejs.org/v2/guide/computed.html. 后来上网查询了资料,结合官网的说明,总 ...
- 八、Vue中的computed属性
看了网上很多资料,对vue的computed讲解自己看的都不是很清晰,今天忙里抽闲,和同事们又闲聊起来,对computed这个属性才有了一个稍微比较清晰的认识,下面的文章有一部分是转自: https: ...
- vue.js计算属性 vs methods
计算属性:Vue.js 模板内的表达式非常便利,但是缺点就是只能用于简单的运算,如果模板中有太多的逻辑运算会让模板不堪重负且难以维护.恰恰计算属性可以处理复杂的逻辑运算,也就是说对于任何复杂逻辑你都应 ...
- Vue的watch和computed属性
Vue的watch属性 Vue的watch属性可以用来监听data属性中数据的变化 <!DOCTYPE html> <html> <head> <meta c ...
- 十三、Vue中的computed属性
以下抄自https://www.cnblogs.com/gunelark/p/8492468.html 看了网上很多资料,对vue的computed讲解自己看的都不是很清晰,今天忙里抽闲,和同事们又闲 ...
- computed属性和watcher
computed属性 在模板中使用表达式是非常方便直接的,然而这只适用于简单的操作.在模板中放入太多的逻辑,会使模板过度膨胀和难以维护.例如: <div id="example&quo ...
- VUE003. 解决data中使用vue-i18n不更新视图问题(computed属性)
案例 在国际化开发中,有一部分需要国际化的文字是由数据驱动的储存在data中,然而VUE的data存在很多无法实时更新视图的问题,比如v-for循环的标签,当数据层次过深,通过源数据数组的索引改变它的 ...
随机推荐
- 华为S5700系列交换机配置通过Telnet登录设备
声明:不管什么服务,都需要交换机开启服务,创建对应权限的用户,在通道下允许协议通过,缺一不可,以telnet为例. 组网图形 图1 配置通过Telnet登录设备组网图 组网需求 如图一所示,PC与设备 ...
- session/token/cookie/socket区别
Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象 ...
- 关于使用UniForm以其他控件为Parent时应该注意的问题
关于使用UniForm以其他控件为Parent时应该注意的问题: 1,不能在其他组件的oncreate,onbeforeshow,onshow等事件中来生成这样的uniform,否则其上的组件不能显示 ...
- Mac下编译tesseract报错 DotProductAVX can't be used on Android
因为我的mac是64位的,所以用32位编译,执行的时候肯定会出错的. 所以应该在 arch/simddetect.cpp中把这句# define X86_BUILD 1 注释掉,就可以了. 参考 ht ...
- java中HashMap集合的常用方法
public Object clone() 返回hashMap集合的副本 其余的方法都是实现Map集合的 https://www.cnblogs.com/xiaostudy/p/9510763.htm ...
- Java对象序列化与反序列化
对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存 ...
- CNI:容器网络接口
CNI 简介 不管是 docker 还是 kubernetes,在网络方面目前都没有一个完美的.终极的.普适性的解决方案,不同的用户和企业因为各种原因会使用不同的网络方案.目前存在网络方案 flann ...
- SpringBoot实现多数据源(实战源码)
通过一个数据库的表数据去查询同步另一个数据库,之前的方式是通过写个小工具,然后jdbc方式进行处理,这个方式也挺好用的.学习了springboot后发现可以实现多数据源操作,然后就具体实现以下. 以下 ...
- web项目在iis配置好后不能正确访问问题集锦,以及IIS常规设置
6.IIS配置好,项目无法访问,注意项目对应的应用程序池的net版本是否正确,是否集成(一般都是集成,很少是经典) 本项目用的4.0,可IIS默认程序池为2.0,将2.0改为4.0就行. 7.HT ...
- CMD控制台下的JAVAC就是“不是内部或外部命令
[Path] 添加 %JAVA_HOME%\bin [JAVA_HOME] D:\Program Files\Java\jdk1.7.0_02 [CLASSPATH] .;%JAVA_HOME%\li ...