watch

简单应用

data() {
    return {
        cityName: 'shanghai'
    }
},
watch: {
    cityName(newName, oldName) {
        // ...
    }
}

直接写一个监听处理函数,当每次监听到 cityName 值发生改变时,执行函数。也可以在所监听的数据后面直接加字符串形式的方法名:

watch: {
    cityName: 'nameChange'
}

deep

当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

data() {
    return {
        cityName: {
            id: 1, 
            name: 'shanghai'
        }
    }
},
watch: {
    cityName: {
        handler(newName, oldName) {
            // ...
        },
        deep: true
    }
}

设置deep: true则可以监听到cityName.name的变化,此时会给cityName的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对watch: {
'cityName.name': {
handler(newName, oldName) {
// ...
},
deep: true
}
}象属性:

data() {
    return {
        cityName: {
            id: 1, 
            name: 'shanghai'
        }
    }
},
watch: {
    'cityName.name': {
        handler(newName, oldName) {
            // ...
        },
        deep: true
    }
}

这样只会给对象的某个特定的属性加监听器。

数组(一维、多维)的变化不需要通过深度监听,对象数组中对象的属性变化则需要deep深度监听。

immediate

进入组件的时候,当值第一次绑定的时候并不会执行watch,是因为immediate 默认 false。
当 immediate = true 的时候,最初绑定值的时候也执行函数。并且可以监测到组件传递数据。

注意点

在watch中不要使用箭头函数,因为箭头函数中的this是指向当前作用域。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容