vue之watch的运用

目录

vue 之 watch 的运用

watch 的作用是什么?

watch 的使用场景:

watch 与 $watch 的参数:

watch 的用法:

1. 通过键路径进行监听数据的变化

2. 通过函数进行监听数据的变化

3. 通过对象的方式进行监听数据的变化

4. 通过数组的方式监听数据的变化


vue 之 watch 的运用

watch 的作用是什么?

1. 观察 vue 实例上一个表达式或者一个函数计算结果的变化。

2. 自定义监听器来响应数据的变化。

watch 的使用场景:

当需要数据变化时执行异步或者开销大的操作时,这个方法最有效。

watch 与 $watch 的参数:

1. immediate 立即执行监听的数据

export default {
    watch: {
        a: {
            handler: function(newVal, oldVal) {},
            immediate: true
        }
    }
}

如果在监听一个数据的时候,希望它能立即执行数据,此时可以使用 immediate属性,但是需要注意的是,如果在第一次执行完监听数据后,需要首先检测一下取消watch函数是否存在,如果不存在,这个时候调用unwatch函数将导致错误。

var unwatch = vm.$watch(
    'value',
    function() {
        dosomething()
        if (unwatch) {
            unwatch()
        }    
    },
    { immediate: true }
)

2. deep 深度监听对象的变化,对于监听数组则不需要使用这个属性。

export default {
    watch: {
        obj: {
            headler(newVal, oldVal) {},
            deep: true
        }
    }
}

如果watch在监听一个对象的时候,监听不到对象中某个属性值得变化,此时使用 deep 属性,就可以监听到了。其原因是:

  1. 对象属于一个引用类型数据,它的本身是在堆里的开辟出来的一个空间,而 watch 监听的那个对象,其实是一个引用指针
  2. 当对象内部的属性发生变化,则对象的引用指针并不会发生改变,因为堆中开辟的空间没有改变;
  3. 当对象变成另外一个对象的时候才能监听到数据的变化,原因是原对象的引用指针指向了新对象开辟的空间地址,所以watch能监听的到数据的变化。

$watch 的参数有三个:[expOrFn, callback, [options]]

  • 第一个参数:键路径或者函数
  • 第二个参数:回调函数
  • 第三个参数:配置参数【immediate】【deep】
  • 返回值是一个取消监听的函数 unwatch
// 键路径的方式
var unwatch = vm.$watch(
    'obj.a',
    function(newVal, oldVal) {}, 
    {deep: true}
)

// 函数的方式
var unwatch = vm.$watch(
    function() { return this.a + this.b }, 
    function(newVal, oldVal) {}, 
    {immediate: true}
)

取消 watch 的对某一个数据的监听,可以直接调用 unwatch() 方法停止触发回调,一旦取消,则这个数据的变化将不会再触发watch的监听。 

watch 的用法:

注意:不应该使用 箭头函数,原因是箭头函数绑定了父级作用域的上下文,所以 this 指向的不是 vue 实例对象

1. 通过键路径进行监听数据的变化

export default {
    watch: {
        'a.b.c': function(newVal, oldVal) {}
    }
}

2. 通过函数进行监听数据的变化

export default {
    watch: {
        a: function(newVal, oldVal) {},
        b: 'someMethod'
    }
}

3. 通过对象的方式进行监听数据的变化

export default {
    watch: {
        a: {
            handler: function(newVal, oldVal) {}
        }
    }
}

4. 通过数组的方式监听数据的变化

export default {
    watch: {
        a: [
            'handler1',
            function handler2(newVal, oldVal) {},
            {
                handler3: function(newVal, oldVal) {}
            }
        ]
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里狂生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值