更深入的理解vue中watch多种灵活的用法

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <h1 v-cloak>{{a}}</h1>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                ab:2,
                a: 1,
                obj: {
                    name: '张三',
                    age:20
                }
            },
            watch: {
                // 第一次监听
                // 第一次新的数据 老的数据
                //   1.普通函数 a:function(newVal,oldVal){
                //       console.log(newVal,oldVal)
                //   }
                /* 2.函数的简写方式*/
                ab(newVal, oldVal) {
                    console.log(newVal, oldVal)
                },
                //  第二次新的数据,第一次新的数据
                //  第三次新的数据,第二次新的数据
                //   ... 一直在监听数据的变化
                /*
                  3.!! 注意不要使用箭头函数 methods选项中不能使用箭头函数
                  a(newVal,oldVal)=>{
                    console.log(newVal,oldVal)
                    console.log(this)  this指向的是window
                }
                */
                // 4.string 写法.hello 是指向的methods中hello函数
                a: 'hello',
                //  5.  object的写法
                // 是用object的写法一定要用handler属性,属性值就是处理函数
                // a: {
                //     handler(newVal, oldVal) {
                //         console.log('newVal', newVal,'object')
                //         console.log('oldVal', oldVal,'object')
                //     }
                // },
                // 6.为啥要有对象的写法是,可以做更多的监听配置,比深度监听
                //  深度监听:对象中某个属性值发生变化默认是监听不到的
                // 对象是引用数据类型
                // var obj={name:'dhsaijadad'} 对象是引用数据类型  这种修改是给对象重新赋值
                // var obj.name='wueqeqe' // 这种修改内存空间没有变
                // obj: {
                //     handler(newVal, oldVal) {
                //         console.log('newVal', newVal,'object')
                //         console.log('oldVal', oldVal,'object')
                //     },
                //     deep: true, // 深度监听   
                //     immediate: true  // 默认触发监听一次
                // },
                // 7.数组的写法[String,function,{handler:function}]
                a: [
                    'hello',
                    function () {
                        console.log('f2')
                    },
                    {
                        handler: function () {
                            console.log('f3')
                        },
                    },
                ],
                // **key的表达式写法** 直接去监听某个对象数据中的某个属性obj.name
                "obj.name":function(newVal,oldVal){
                    console.log('newVal', newVal)
                    console.log('oldVal', oldVal)
                }
            },
            methods: {
                hello(newVal, oldVal) {
                    console.log(newVal, oldVal)
                    console.log('newVal', newVal)
                    console.log('oldVal', oldVal)
                    console.log(this) //this的指向是vue的实例
                }
            }
        })
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值