Vue 中 Computed 与 Watch 区别
Computed
computed 是一个计算属性,类似过滤器,对绑定的 view 的数据进行处理
computed get 里面必有 return 如果没有直接报错
get 用法
data: {
firstName: 'Foo',
lastName: 'Bar'
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
- fullName 不能在 data 里面定义,因为 computed 作为计算属性定义的 fullName 并返回对应的结果给这个变量,变量不可以重复定义和赋值
get 和 set 用法
data: {
firstName: 'Foo',
lastName: 'Bar'
},
computed: {
fullName:{
get(){//回调函数 当需要读取当前属性值是执行,根据相关数据计算并返回当前属性的值
return this.firstName + ' ' + this.lastName
},
set(val){//监视当前属性值的变化,当属性值发生变化时执行,更新相关的属性数据
//val就是fullName的最新属性值
console.log(val)
const names = val.split(' ');
console.log(names)
this.firstName = names[0];
this.lastName = names[1];
}
}
}
Watch
- watch 就是一个观察动作
监听简单类型
data(){
return{
'first':2
}
},
watch:{
first(newvalue,oldvalue){
console.log(newvalue)
console.log(oldvalue)
console.log(this.first)
}
}
监听复杂类型
data(){
return{
'first':{
second:0
}
}
},
watch:{
first.second:function(newVal,oldVal){
console.log(newVal,oldVal);
}
},
},
computed 与 watch 区别
computed 特性
计算值
应用:就是相当于对 data 数据里面的二次封装
具有缓存性质。页面重新渲染值不变化。计算属性会立即返回之间的计算结果,而不必在执行函数
watch 特性
- 观察
- 应用: 监听 props $emit 或本组件的值执行异步操作
- 无缓存性 : 页面重新渲染时值不变化也会执行