vue-js。数据更改时手表不工作

vue-js. watch doesn't work when data is changed

我是 vue.js 的新手。但是我在数据绑定和重新渲染方面遇到了麻烦。结合 socket-io 和 vue-chartjsm 我遇到了渲染问题。

我打算通过 generateData() 更改数据,这似乎有效。我希望 watch: 会起作用,但它没有。

我想我误解了一些概念。你能告诉我我的想法有什么问题吗?

App.vue

(...)
export default {
  name: "App",
  components: {
    ReactiveBarChart
  },
  data() {
    return {
      chartData: null,
      originalData: null
    };
  },
  watch: {
    originalData: function(data) {
      console.log(data)
      // not triggered after generateData() is called
    }
  },
  methods: {
    generateData() {
      let changeArray = [];
      changeArray = this.originalData;
      changeArray[0] = 20;
      this.originalData = changeArray;
      console.log("data :", this.originalData)
      // logged properly with [20, .....]
    },
(...)

尝试将 originalData 声明为空数组,并将您的值 push() 声明为空数组。您的代码可能类似于:

export default {
  data() {
    return {
      chartData: null,
      originalData: []
    };
  },
  watch: {
    originalData: function(data) {
      console.log(data)
    }
  },
  methods: {
    generateData() {
      let changeArray = [];
      changeArray = this.originalData;
      changeArray.push(20);
      this.originalData = changeArray;
      console.log("data :", this.originalData)
    }
  }
}

如果您特别想更改第一个位置的数组值,请使用 splice(0,1,20) 而不是 push(20)

您可以阅读有关 Array Methods

的更多有用信息