美文网首页
VUE 如何监测对象属性及数组的变化 ?

VUE 如何监测对象属性及数组的变化 ?

作者: 秘果_li | 来源:发表于2019-10-21 09:37 被阅读0次

关于 VUE 数据更新检测的限制官方文档:
https://cn.vuejs.org/v2/guide/list.html#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9

关于数组变化

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

  • 利用索引直接设置一个数组项 vm.items[indexOfItem] = newValue
  • 修改数组长度 vm.items.length = newLength

解决办法

方法一:

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

方法二:

vm.items.splice(indexOfItem, 1, newValue)  // items为数组

关于对象变化

由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除

解决办法

对于已经创建的实例,Vue 不允许动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式属性

实际的开发中我需要监听 localStorage 中数据的变化

补充一下
关于 localStoragesessionStorage

Storage 中只能存储字符串的数据,对于数组或对象不能直接存储。我们可以通过 JSON 对象提供的 parsestringify 将其他数据类型转化成字符串,再存储到 Storage 中就可以了

实际开发中的数据结构如下,需要监听 options 数组中对象的 options 属性的变化,属性值为数组类型,存储在 localStorage

function getData() {
  return {
    options: [
      {
        label: '默认工作台',
        options: optionsDefault
      },
      {
        label: '其他工作台',
        options: optionsOthers
      }
    ],
    value: optionsDefault ? optionsDefault[0].label : '' //默认选中的选项
  };
}

获取 localStorage 中的数据,赋值给 options 属性,实现页面响应渲染

let  optionsDefault = JSON.parse(localStorage.getItem('optionsDefault'));
let  optionsOthers = JSON.parse(localStorage.getItem('optionsOthers'));
      this.$set(this.options[0], 'options', optionsDefault);
      this.$set(this.options[1], 'options', optionsOthers);

相关文章

网友评论

      本文标题:VUE 如何监测对象属性及数组的变化 ?

      本文链接:https://www.haomeiwen.com/subject/wtmzmctx.html