在Vue的官方文档中有以下解释:
观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值。表达式只接受监督的键路径。对于更复杂的表达式,用一个函数取代。
注意:在变异 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变异之前值的副本。
也就是说,在对数组使用方法进行操作或者对对象进行遍历的变异操作时,是无法记录旧值的。 于是简单得总结了一下,可以使用以下方法解决:
data () {
return {
selectedTag: Object || Array
}
},
methods: {
...
//对象或者数组的变异操作
},
// 如果是对象,
computed: {
selectedTagNew () {
return JSON.parse(JSON.stringify(this.selectedTag))
}
},
如果为数组,可以改为
computed: {
selectedTagNew () {
return [...new Set(selectedTag)]
}
},
// 然后改为改为监听selectedTagNew,就能监听到新旧值的不同
watch: {
selectedTagNew: {
handler(val, oldval){
...
}
}
}