关于Vue中数组更新问题

v-for指令把数组和一组

  • 元素绑定了。在
  • 元素内部,用循环变量t引用某个属性,例如,{{ t.name }}。这样,我们只关心如何更新Model,不关心如何增删DOM节点,大大简化了整个页面的逻辑。

    我们可以在浏览器console中用window.vm.todos[0].name='计划有变'查看View的变化,或者通过window.vm.todos.push({name:'新计划',description:'blabla...'})来增加一个数组元素,从而自动添加一个

  • 元素。

    需要注意的是,Vue之所以能够监听Model状态的变化,是因为JavaScript语言本身提供了Proxy或者Object.observe()机制来监听对象状态的变化。但是,对于数组元素的赋值,却没有办法直接监听,因此,如果我们直接对数组元素赋值:

    vm.todos[0] = {
        name: 'New name',
        description: 'New description'
    };
    

    会导致Vue无法更新View。

    正确的方法是不要对数组元素赋值,而是更新:

    vm.todos[0].name = 'New name';
    vm.todos[0].description = 'New description';
    

    或者,通过splice()方法,删除某个元素后,再添加一个元素,达到“赋值”的效果:

    var index = 0;
    var newElement = {...};
    vm.todos.splice(index, 1, newElement);
    

    Vue可以监听数组的splicepushunshift等方法调用,所以,上述代码可以正确更新View。

     

    原文地址:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014757513445737513d7d65cd64333b5b6ba772839e401000

  • 你可能感兴趣的:(Vue.js)