VUE框架响应式和数据劫持的具体逻辑------VUE框架

<!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="../js/vue.js"></script>
</head>
<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <!-- 所谓响应式就是我们VUE的核心机制,通过我们改变data中的数据 -->
        <!-- 自动为我们修改dom元素上的内容,我们借此可以减少对dom的操作 -->
        <!-- 达到专注业务部分的目的 -->
        <h1>{{a.b.c.d}}</h1>
        <h1>{{a.email}}</h1>
        <h1>{{a.email1}}</h1>
        <h1>{{a.email2}}</h1>
    </div>
    <script>
        const vm = new Vue({
            el : "#app",
            data : {
                msg : "Hello",
                // 由此可知,VUE会给data中的所有属性,包括属性的属性做数据劫持
                // 方便我们实现数据更新时刷新dom树
                // 这种根下的东西,只能在定义的时候写或者添加东西,后期不能添加
                // 想添加,只能在声明好的属性下添加
                a : {
                    b : {
                        c : {
                            d : 1
                        }
                    }
                }
            }
        });
        // 不能给VM追加响应式的属性,也不能给data追加响应式的属性
        Vue.set(vm,'x','1');
        // 后期给VUE动态追加的一些属性会添加响应式处理吗? 
        // 答不会,后期添加的属性不是在data中定义的,vue给对象添加响应式处理
        // 是通过遍历循环data来实现的,因此,后期添加的属性不在data里面,无法添加响应式处理
        vm.$data.a.email2 = "1212asd2";
        // 使用Vue.set方法赋值
        // Vue.set方法可以直接将我们这个添加的属性添加到我们的data里面
        // 因此,如果我们想给后期追加的属性添加响应式处理的话
        // 让他们变成动态资源而不是静态的
        // 我们可以采用Vue.set()方法或者vm.$set()方法来实现
        // 这两种方式都是可以添加响应式的
        Vue.set(vm.a,'email',"1212affs12");
        vm.$set(vm.a,'email1',"121acz312");
    </script>
    
</body>
</html>

<!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="../js/vue.js"></script>

</head>

<body>

    <div id="app">

        <h1>{{msg}}</h1>

        <!-- 所谓响应式就是我们VUE的核心机制,通过我们改变data中的数据 -->

        <!-- 自动为我们修改dom元素上的内容,我们借此可以减少对dom的操作 -->

        <!-- 达到专注业务部分的目的 -->

        <h1>{{a.b.c.d}}</h1>

        <h1>{{a.email}}</h1>

        <h1>{{a.email1}}</h1>

        <h1>{{a.email2}}</h1>

    </div>

    <script>

        const vm = new Vue({

            el : "#app",

            data : {

                msg : "Hello",

                // 由此可知,VUE会给data中的所有属性,包括属性的属性做数据劫持

                // 方便我们实现数据更新时刷新dom树

                // 这种根下的东西,只能在定义的时候写或者添加东西,后期不能添加

                // 想添加,只能在声明好的属性下添加

                a : {

                    b : {

                        c : {

                            d : 1

                        }

                    }

                }

            }

        });

        // 不能给VM追加响应式的属性,也不能给data追加响应式的属性

        Vue.set(vm,'x','1');

        // 后期给VUE动态追加的一些属性会添加响应式处理吗?

        // 答不会,后期添加的属性不是在data中定义的,vue给对象添加响应式处理

        // 是通过遍历循环data来实现的,因此,后期添加的属性不在data里面,无法添加响应式处理

        vm.$data.a.email2 = "1212asd2";

        // 使用Vue.set方法赋值

        // Vue.set方法可以直接将我们这个添加的属性添加到我们的data里面

        // 因此,如果我们想给后期追加的属性添加响应式处理的话

        // 让他们变成动态资源而不是静态的

        // 我们可以采用Vue.set()方法或者vm.$set()方法来实现

        // 这两种方式都是可以添加响应式的

        Vue.set(vm.a,'email',"1212affs12");

        vm.$set(vm.a,'email1',"121acz312");

    </script>

   

</body>

</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值