zoukankan      html  css  js  c++  java
  • vue更新数组时触发视图更新的方法

    变异方法:


    Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新。这些方法如下:

    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()

    替换数组:


    例如:filter()concat()和 slice() 。这些不会改变原始数组,但总是返回一个新数组。当使用这些非变异方法时,可以用新数组替换旧数组:

    example1.items = example1.items.filter(function (item) {
      return item.message.match(/Foo/)
    })
    

    你可能认为这将导致 Vue 丢弃现有 DOM 并重新渲染整个列表。幸运的是,事实并非如此。Vue 为了使得 DOM 元素得到最大范围的重用而实现了一些智能的、启发式的方法,所以用一个含有相同元素的数组去替换原来的数组是非常高效的操作。

    注意事项:


    由于 JavaScript 的限制,Vue 不能检测以下变动的数组:

    1. 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
    2. 当你修改数组的长度时,例如:vm.items.length = newLength

    举个例子:

    var vm = new Vue({
      data: {
        items: ['a', 'b', 'c']
      }
    })
    vm.items[1] = 'x' // 不是响应性的
    vm.items.length = 2 // 不是响应性的
    

    为了解决第一类问题,以下两种方式都可以实现和vm.items[indexOfItem] = newValue 相同的效果,同时也将触发状态更新:

    // Vue.set
    Vue.set(vm.items, indexOfItem, newValue)
    
    // Array.prototype.splice
    vm.items.splice(indexOfItem, 1, newValue)
    

    你也可以使用vm.$set实例方法,该方法是全局方法 Vue.set 的一个别名:

    vm.$set(vm.items, indexOfItem, newValue)
    

    为了解决第二类问题,你可以使用 splice:

    vm.items.splice(newLength)
  • 相关阅读:
    22.Collections排序
    21.Collections常用方法的使用
    20.ArrayList获取并打印新闻标题
    19. Set接口的一般用法
    JS脚本显示当前日期+星期几[转]
    java流下载
    技术书籍分类[转]
    Javascript 继承 call与prototype
    SpringMVC访问静态资源[转]
    获取调用者Class和method、反射获取get方法、获取注解信息
  • 原文地址:https://www.cnblogs.com/kzxiaotan/p/11676351.html
Copyright © 2011-2022 走看看