【问题标题】:this.$set to update an array is not working (VueJS)this.$set 更新数组不起作用(VueJS)
【发布时间】:2019-10-03 14:05:43
【问题描述】:

当我运行它时,控制台日志给了我更新的数组xyz,但是当我在 DOM {{xyz}} 中打印它时,它不会更新。有什么原因吗?

data() {
   return {
      xyz: []
   }
},
methods: {

    getDataFromXML() {

        Array.prototype.forEach.call(this.allxml, path => {

                fs.readFile(xmlLoc, (err, data) => {

                    if (err) throw err;

                    var XmlNode = new DOMParser().parseFromString(data.toString(), 'text/xml')
                    this.$set(this.xyz,path,XmlNode)

                })  

        })

        console.log(this.xyz)

    }
}

【问题讨论】:

  • 您使用设置错误的方式路径应该是“在您的演员阵容中”的索引。有关详细信息,请参阅此帖子:stackoverflow.com/questions/58181375/…
  • 没看懂,path其实是个变量。它来自 foreach 循环。

标签: javascript arrays vue.js vuejs2


【解决方案1】:

您使用错误的方式。您正在向数组本身添加一个属性。

正确的 this.$set 我在这里解释How to set dynamic object values with Vue/Vuex?

在这里,我创建了一个示例,一个按钮操作带有 set 的数组。 (您在示例中所做的事情) 另一个向数组中添加一个元素(https://codepen.io/reijnemans/pen/ZEEzJpL?editors=1011

    <div id="app">

   <h1>Content of array {{ data }}</h1>
   <h1>Array property alpa <span style="color: red">{{ data.alpha }}<span></h1>

    <v-btn @click="set1">manipulate array with $set</v-btn>
    <v-btn @click="set2">add to array with push</v-btn>
</div>

JS

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data() {
    return {
      data: ['test']
    }
  } ,
  methods: {
    set1() {
      this.$set(this.data, 'alpha', 'xyz')

    },
    set2() {
      this.data.push('xyz')
    }
  }
})

【讨论】:

  • 谢谢。当我转向另一种方法来解决这个问题时,会检查这一点。
  • 如果 xyz 来自函数怎么办。当我用动态值替换它时,它不会出现在 DOM 上。
  • 你的 xyz 返回什么?
  • 图片列表的网址
  • 当你想组合成数组时,你必须使用 concat vuejs.org/v2/guide/list.html#Replacing-an-Array。请记住 concat 总是返回一个新数组。 this.data = this.data.concat(xyz)
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 2019-03-29
  • 2018-01-13
  • 2017-02-17
  • 2018-04-07
相关资源
最近更新 更多