猿问

Vue2的响应式问题

最近学习Vue2, 遇到2个问题:


1.data的属性是对象, 通过赋值直接设置对象的属性值, 原本不应该视图更新的, 但是如果设置data另一个属性的值, 导致视图更新, 同时会导致这个对象的视图更新.


<div id="app">

    <div>

        {{message}}

    </div>


    <div>

        {{object.name}}

    </div>

</div>

var vm = new Vue({

    el: "#app",

    data(){

        return {

            message: "message初始值",

            object: {}

        }

    }

});


// vm.$set(vm.object, "name", "通过set设置object的属性的值");


// 通过赋值, 直接设置属性值, 页面视图没有更新

vm.object.name = "设置object的属性的值";


// 取消注释这句话, 会触发上面这句话的视图更新!

//vm.message = "设置message的值";


// vm.$forceUpdate();

2.setTimeout里面, 即使通过Vue.set没有视图更新


<div id="app">

    <div>

        {{message}}

    </div>


    <div>

        {{object.name}}

    </div>

</div>

var vm = new Vue({

    el: "#app",

    data(){

        return {

            message: "message初始值",

            object: {}

        }

    }

});


// 如果取消注释这个, 那setTimeout里面的视图会更新

// vm.$set(vm.object, "name", "设置object的属性的值");

vm.object.name = "不通过set, 设置object的属性的值";


setTimeout(function(){

    // 页面视图没有更新

    vm.$set(vm.object, "name", "通过set设置object的属性的值");

    // vm.$forceUpdate();

}, 500);

不知描述的是否清晰, 请帮忙看看(没百度到), 感激!


互换的青春
浏览 430回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答