美文网首页
vue学习(14)深度监视

vue学习(14)深度监视

作者: 哆啦C梦的百宝箱 | 来源:发表于2022-02-25 10:33 被阅读0次
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>天气案例-深度监视</title>
    </head>
    
    <body>
        <div id="root">
            <div>今天天气很{{info}}</div>
            <button @click="changeWeather">切换天气</button>
            <div>{{numbers.a }}</div>
            <button @click="numbers.a++">改变a的值</button>
            <div>{{numbers.b}}</div>
            <button @click="numbers.b++">改变b的值</button>
        </div>
        <script src="../js/vue.js"></script>
        <script type="text/javascript">
            Vue.config.productionTip = false;//阻止 vue 在启动时生成生产提示
            const vm = new Vue({
                el: '#root',
                data: {
                    isHot: false,
                    numbers: {
                        a: 1,
                        b: 1
                    }
                },
                computed: {
                    info() {
                        return this.isHot ? '炎热' : '凉爽';
                    }
                },
                methods: {
                    changeWeather() {
                        this.isHot = !this.isHot;
                    }
                },
                watch: {
                    //完整形式
                    isHot: {
                        //初始化时,让handler调用一次
                        immediate: true,//默认是false
                        //handler什么时候调用?isHot发生改变的时候。
                        handler(newValue, oldValue) {
                            console.log('isHot被修改了', newValue, oldValue);
                        }
                    },
                    //简写形式
                    isHot(newValue, oldValue){
                        console.log('isHot被修改了', newValue, oldValue);
                    },
                    //监听多级结构中所有属性的变化
                    numbers:{
                        deep:true,
                        handler(){
                            console.log('numbers发生了变化');
                        }
                    }
                }
            });
            //第二种写法
            vm.$watch('isHot', {
                //初始化时,让handler调用一次
                immediate: true,//默认是false
                //handler什么时候调用?isHot发生改变的时候。
                handler(newValue, oldValue) {
                    console.log('isHot被修改了', newValue, oldValue);
                }
            });
            //第二种的简写形式
            vm.$watch('isHot',function(newValue, oldValue){
                console.log('isHot被修改了', newValue, oldValue);
            })
        </script>
    </body>
    
    </html>
    
    知识点

    1:vue中的watch默认不监测对象内部值的改变。(一层)
    2:配置deep:true可以监测对象内部值的改变。(多层)
    3:当watch中只需要一个handler函数,不需要其他的配置项的时候,可以使用简写。
    备注:
    1:使用watch时,根据数据的具体结构,决定是否采用深度监视。
    2:vue自身可以监测对象内部值的改变,只是提供的watch默认不可以。

    相关文章

      网友评论

          本文标题:vue学习(14)深度监视

          本文链接:https://www.haomeiwen.com/subject/wrablrtx.html