Vue基础(watch 侦听属性)

watch 侦听属性

有的时候,我们需要的派生数据是通过异步的方式处理的,这个时候,计算属性就不太好用了(不能处理异步)。我们可以使用另外一个选项:watch

• watch : 侦听属性;监听的是data的属性,当属性发生改变以后,会做的一些事情

• 里面传一个函数,第一个参数是最新的值,第二个参数是修改前的值

• 深度监听: 如果监听了对象,当这个对象中的属性名对应的键值对发生改变以后,并不会触发监听的这个对象的函数;因为这个引用数据类型的地址没发生改变;

这个时候需要把watch监听的方法改成对象的写法,

	handler相当于函数,
    deep:true,是对这个person对象中的每一个属性进行监听,
    immediate:true,可以让函数立即执行一次;当其中一个属性发生改变,也会触发handler这个函数;

• 监听对象的时候写在handler方法的参数只写一个就可以,这个参数代表改变之后的值

• 如果想监听对象里的一个属性值可以写成’对象.属性名’ ,这个时候写在handler方法的参数就得写两个,
第一个参数是最新的值,第二个参是修改前的值

• 另一种添加监视的方法:vm.$watch(“XX”,function(value){})
https://cn.vuejs.org/v2/api/#vm-watch

延迟输入用watch
多层监听

对于多层数据的监听,可以使用字符串+点语法
在这里插入图片描述

深度监听

默认情况下,watch 只对当前指定的值进行一层监听,如果需要对对象进行深度监听

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./node_modules/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <input type="text" v-model='obj.name'>
        {{obj.name}}
    </div>
    <script>

        let vm = new Vue({
            el: '#app',
            data: {
                val: 'yy',
                obj: {
                    name: 'yy'
                }
            },
            //watch监控的属性是data中的属性
            watch: {
                //val是被监控的属性 可以写成一个函数的形式
                // 只要被监控的属性发生改变就会触发这个函数
                // 默认第一次不会执行
                /*                 val(newVal, oldVal) {
                                    // 每一次执行默认传两个值 新值 和 旧值
                                    // console.log(1);
                                    console.log(newVal, oldVal);
                                } */
               // 对象写法:
                val: {
                    handler(newVal, oldVal) {
                        console.log(newVal, oldVal);

                    },
                    // 第一次执行一下 只传一个参数 就是当前值
                    /* immediate() {
                        return true
                    } */
                    immediate: true
                },
                obj: {
                    // 默认监控对象的时候里面的属性发生改变是监控不到的因为监控的是对象的地址值

                    //如果想监控到属性的改变就加一个属性deep:true深度监控
                    //但是要注意handler传的新值和旧值内存里面都是改变后的值
                    handler(newVal, oldVal) {
                        // console.log(newVal, oldVal)
                        console.log(arguments);                        
                        // console.log(555);
                        
                    },
                    deep: true
                }
            }
        })
    </script>
</body>

</html>

computed 不支持promise

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值