computed 计算属性
1.computed用来监控自己定义的变量,
该变量不在data里面声明,直接在computed里面定义,
然后即可在页面上进行双向数据绑定展示出结果或者用作其他处理。
2.computed比较适合对多个变量或者对象进行处理后返回一个结果值,
也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化。
computed的使用场景:
举例:
购物车里面的商品列表和总金额之间的关系。
只要商品列表里面的商品数量发生变化,或减少或增多或删除商品,总金额都应该发生变化。
这里的这个总金额使用computed属性来进行计算是最好的选择
computed与watch的区别:
watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以。
watch可以监控一个变量,也可以是一个对象,但是不能监控某个变量中的属性的变化
错误代码实例:
watch:{
//监控商品列表中是商品价格是无法做到的
goodsList.price(newVal,oldVal){
}
}
watch一般用于监控路由、input输入框的值特殊处理等等,它比较适合的场景是一个数据影响多个数据
computed可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新。
在Vue中有多种方法为视图设置值:
使用指令直接将数据值绑定到视图
使用简单的表达式对内容进行简单的转换
使用过滤器对内容进行简单的转换
除此之外,还可以使用计算属性根据数据模型中的值或一组值来计算显示值。
computed与method的比较
通过监听input或者某些标签的on-change事件,method能到到与computed相同的效果
但是,在性能消耗上,method会是computed的好几倍。
在computed中只需要监听on-change事件中涉及的变量的状态与数值是否发生改变
而method中的方法,在页面刷新或者on-change有状态变更时,便会触发。
在Vue中计算属性是基于它们的依赖进行缓存的,而方法是不会基于它们的依赖进行缓存的。从而使用计算属性要比方法性能更好。
computed 计算属性默认只有getter,不过在需要时你也可以提供一个setter
示例:
computed: {
fullName: {
get: function () { return this.firstName + '' + this.lastName},
set: function (newValue) {
let names = newVal.split(',')
this.firstName = names[0]
this.lastName = names[names.length-1]
}
}
}