属性侦听器

56 阅读1分钟

属性侦听器
可以监听data里的属性值,当属性值发生变化时,会使watch里相应的函数触发

  • 修改了与监听无关的属性:页面会重新渲染,但是侦听器属性不会触发
  • 修改了引用数据内部的属性值:页面会重新渲染,但是侦听器属性不会触发
  • 只有修改了引用数据的引用 才能触发侦听器属性
  • 在watch对象里面,方法要与监听的属性一致
   <style>
        .box {
            width: 200px;
            height: 50px;
            background-color: aquamarine;
            text-align: center;
            margin-top: 10px;
        }
    </style>
    <div id="app">
        <div @click="fn" class="box">{{msg}}</div>
        <div @click="fn1" class="box">{{obj}}</div>
    </div>
    <script>
        new Vue({
                    el: "#app",
                    data: {
                        msg: "信息",
                        lu: 7,
                        obj: { name: "lay",age: "22"}
                    },
                    methods: {
                        fn() {
                            this.msg = "修改信息"
                            this.lu++ //修改了与监听无关的属性:页面会重新渲染,但是侦听器属性不会触发"
                            console.log(this.msg, this.lu);
                        },
                        fn1() {
                            this.obj.age = 18
                            //   this.obj={name:"chanYeol",age:18} //只有修改了引用数据的引用 才能触发侦听器属性
                            console.log(this.obj);
                            this.obj.name = "D.O" //若想触发侦听器属性,必须深度监听
                        }
                    },
                    // 监听属性,里面方法的名字要与监听的属性保持一致
                    watch: {
                        // 当被监听的属性的值发生变化时,该方法会被触发
                        msg() {
                            console.log("信息修改了就打印");
                        },
                        obj() {
                            console.log("obj修改了就打印");
                        },
                        // 深度监听
                        obj: {
                            deep: true,
                            handler: () => {
                                console.log("obj改变了")
                            }
                        }
                    }})
    </script>

image.png