引用参考:https://www.jianshu.com/p/bb7a2244c7ca
https://www.cnblogs.com/widgetbox/p/8954162.html
https://segmentfault.com/a/1190000012948175?utm_source=tag-newest
计算属性,当页面中有些数据依赖其他数据进行变动的时候使用。
<p id="app"> {{fullName}} </p>
<script>
var vm = new Vue({
el: '#app',
data: {
firstName: 'Foo',
lastName: 'Bar',
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})
</script>
// ...
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]
}
}
}
这个时候在控制台直接运行vm.fullName = ‘bibi wang’,相应的firstName和lastName也会改变。
watch用于观察和监听页面上的vue实例,变化的同时进行异步操作或者是比较大的开销,那么watch为最佳选择。watch为一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。
var vm = new Vue({
el: '#app',
data: {
firstName: 'Foo',
lastName: 'Bar',
fullName: 'Foo Bar'
},
watch: {
firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
})
如果在data中没有相应的属性的话,是不能watch的,这点和computed不一样。
watch: {
firstName: {
handler (newName, oldName) {
this.fullName = newName + ' ' + this.lastName
},
immediate: true
}
},
immediate:true代表如果在 wacth 里声明了 firstName 之后,就会立即先去执行里面的handler方法
new Vue({
template: `
<div>
<p>Obj.a: <input type="text" v-model="obj.a"/></p>
</div>
`,
data: {
obj: {
a: '123'
}
},
watch: {
obj: {
handler () {
console.log('obj.a changed')
},
immediate: true
// deep: true
}
}
})
但是监听到的newVal和oldVal是一样的,因为他们索引的是同一个对象/数组
watch: {
'obj.a': {
handler () {
console.log('obj.a changed')
},
immediate: true
// deep: true
}
}
原文:https://www.cnblogs.com/xiaoyuchen/p/11426715.html