【问题标题】:Append array inside object using $set (props doesn't get updated)使用 $set 在对象内追加数组(道具不会更新)
【发布时间】:2018-01-14 07:31:02
【问题描述】:

我有一个对象,结构看起来像这样

obj: {
  1: {
    'a': [ [] ],
    'b': [ [] ]
  }
}

现在,在观察者中,我正在尝试将'c' => [ [] ] 附加到该对象。

  • 我尝试使用this.obj[1]['c'] = [ [] ],但是当我这样做时,它不会观察道具(子组件上)的变化。我几乎可以肯定我需要使用$set

  • this.$set(this.obj, 1, { ['c']: [ [] ] }) - 使用它实际上会监视它,但是它会完全删除 'a' 和 'b' 属性。

  • 使用this.$set(this.obj[1], ['c'], [ [] ]); - 似乎改变了对象,但是道具也不会看到这个

$set的正确使用方法是什么

【问题讨论】:

  • 不就是this.$set(this.obj['1'], 'c', [[]])吗?不知道为什么要尝试使用数组(即['c'])作为对象键
  • 使用它,它会正确更新道具上的对象,但是 DOM 没有得到更新:/ 如果我在运行 for 循环之前使用{{ obj }},它仍然没有
  • 请举例说明

标签: javascript arrays object vue.js vuejs2


【解决方案1】:

如 cmets 中所述,只需使用

this.$set(this.obj['1'], 'c', [[]])

例如...

new Vue({
  el: '#app',
  data: {
    obj: {
      1: {
        'a': [ [] ],
        'b': [ [] ]
      }
    }
  },
  methods: {
    addC: function() {
      this.$set(this.obj['1'], 'c', [[]])
    }
  }
})
<div id="app">
  <p><button @click="addC">Add "c" property</button>
    <ul>
      <li v-for="(prop, key) in obj">
        {{ key }}
        <ul>
          <li v-for="(arr, letter) in prop">
            {{ letter }} - size: {{ arr.length }}
            <ul>
              <li v-for="(sub, idx) in arr">
                Index {{ idx }} - size: {{ sub.length }}
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
</div>
<script src="https://unpkg.com/vue@2.4.2/dist/vue.min.js"></script>

【讨论】:

  • 是的,我也试过小提琴:/它按预期工作,但在我的项目中,由于某种原因,它没有按预期工作。它正在更新对象,我可以在 vue 调试器中看到,但它不会更新 DOM。使用{{ obj }} 也会得到相同的结果:/
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多