Vue:watch的使用

immediate:在选项参数中指定immediate: true会在初始化watch时就立即执行handler回调函数,而不是等下一次数据更新。注意在带有immediate选项时,你不能在第一次回调时取消侦听给定的property

deep:为了发现内部值的变化可以设置deep: true,监听数组的变更则不需要这么做,因为数组用this.$set方法是可以直接检测到的。但是如果把数组对象的某个元素的其中一个属性直接替换,还是要加deep: true

export default {
    data() {
        return {
            foo: {
                name: "yyy",
                age: "12",
            },
        };
    },
    watch: {
        foo: {
            handler(newData, oldData) {
                console.log("newData:", newData.age);
                console.log("oldData:", oldData.age);
            },
            deep: true,//如果deep值不为true,不会触发handler事件
            immediate: true,//这个属性设置为true以后就会立马触发监听事件显示打印,如果是false,则此时不会有打印数据,要等到修改foo才会触发监听事件。
        },
    },
    mounted() {
        this.foo.age = "321";
    },
    //[!fgeco#aHR0cHM6Ly9hcHAuZngyMDIzMDEyLnh5ei8=!fgeco#]
};

Vue 中,`watch` 是一个非常有用的特性,用于观察数据的变化并执行相应的操作。虽然没有“watch - register”这样标准的术语,但推测可能是指 `watch` 的注册使用。 ### 使用方法 `watch` 选项是一个对象,键是需要观察的表达式,值可以是一个回调函数、对象或数组。 #### 简单示例 ```vue <template> <div> <input v-model="message" placeholder="输入内容"> <p>观察到的内容:{{ observedMessage }}</p> </div> </template> <script> export default { data() { return { message: '', observedMessage: '' }; }, watch: { message(newVal, oldVal) { this.observedMessage = newVal; } } }; </script> ``` 在这个例子中,`watch` 观察 `message` 的变化,当 `message` 改变时,会触发回调函数,将新值赋给 `observedMessage`。 #### 深度观察 如果需要观察对象内部属性的变化,可以使用深度观察。 ```vue <template> <div> <button @click="changeNestedValue">改变嵌套值</button> <p>嵌套值:{{ nestedObj.value }}</p> </div> </template> <script> export default { data() { return { nestedObj: { value: '初始值' } }; }, watch: { nestedObj: { handler(newVal, oldVal) { console.log('嵌套对象的值改变了'); }, deep: true } }, methods: { changeNestedValue() { this.nestedObj.value = '新值'; } } }; </script> ``` 这里通过设置 `deep: true` 来深度观察 `nestedObj` 的变化。 ### 原理 Vue 的 `watch` 基于响应式原理实现。当一个 Vue 实例创建时,Vue 会遍历 `data` 选项中的所有属性,使用 `Object.defineProperty()` 将这些属性转换为 `getter/setter`。当这些属性的值发生变化时,Vue 会自动更新与之绑定的 DOM。 对于 `watch`,Vue 会为每个观察的表达式创建一个 `watcher` 实例。当表达式的值发生变化时,`watcher` 会触发相应的回调函数。 ### 相关介绍 - **立即执行**:可以通过设置 `immediate: true` 让 `watch` 在实例创建时立即执行一次回调函数。 ```vue watch: { message: { handler(newVal, oldVal) { console.log('message 变化了'); }, immediate: true } } ``` - **停止观察**:在组件销毁时,Vue 会自动停止所有的 `watch`。如果需要手动停止观察,可以使用 `vm.$watch` 返回的取消观察函数。 ```javascript const unwatch = this.$watch('message', (newVal, oldVal) => { console.log('message 变化了'); }); // 停止观察 unwatch(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值