【写在前面】在实际开发中,我们要监听的属性可能是对象中的某个属性,除了对整个对象进行监听以外,我们可以用单引号包裹的形式监听对象中的某个属性。
watch: {'searchFormModel.appKey': function (newVal) {if (newVal.includes('全部')) {if (newVal.length > 1) {this.value.shift();}} else if (this.value.length === this.cityList.length - 1) {// 如果选择了除“全部”外的所有城市,自动选择“全部”this.value = ['全部'];}},},
除了上面提到的写法之外,我们回顾一下watch的其他写法:
1、省略 function
对于非对象中的某个属性,我们可以直接省略 function ,以达到简化代码的目的
watch: {value(newVal) {if (newVal.includes('全部')) {if (newVal.length > 1) {this.value.shift();}} else if (this.value.length === this.cityList.length - 1) {// 如果选择了除“全部”外的所有城市,自动选择“全部”this.value = ['全部'];}}}
2、添加 immediate 和 handler
我们知道 watch 默认情况下首次是不监听的,只有当数据发生改变时,watch才会监听;但在实际开发中,我们需要立即监听,这时就需要启用 immediate 属性
watch: {value: {handler(newName, oldName) {// ...},immediate: true}}
3、deep 开启深度监听
在我们监听某个对象时,默认仅支持监听顶层属性,深层次的是监听不到的;如果需要深度监听,需要手动开启 deep
watch: {value: {handler(newName, oldName) {// ...},deep: true,immediate: true}}