Javascript 如何仅运行一次vue计算属性?

Javascript 如何仅运行一次vue计算属性?,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,我有一个填充数组的计算属性,但是我在之后处理这个数组(从&推到它),我希望一旦数组为空,就保持为空(所说的计算属性不会再次填充它)。我该怎么做?我使用computed属性是因为我通过getter从Vuex存储获取数据。 这是有问题的财产: populateAvailableMachines() { Object.values(this.userData).forEach(user => { if (this.$auth.user().id == user.id) {

我有一个填充数组的计算属性,但是我在之后处理这个数组(从&推到它),我希望一旦数组为空,就保持为空(所说的计算属性不会再次填充它)。我该怎么做?我使用computed属性是因为我通过getter从Vuex存储获取数据。 这是有问题的财产:

populateAvailableMachines() {
  Object.values(this.userData).forEach(user => {
    if (this.$auth.user().id == user.id) {
      if (this.availableMachines.length == 0) {
        Object.keys(user.machine).forEach(key => {
          this.availableMachines.push(user.machine[key].machine_name);
        });
      }
    }
  });
},
以下是推送/拼接的方法:

addMachineTab(item) {
  let index = this.availableMachines.indexOf(item);
  this.selectedMachines.push(this.availableMachines.splice(index, 1));
},

我想要实现的是,一旦将available machines数组中的所有值移动到selected machines数组中,就不要重新运行填充空available machines数组的computed属性。

不建议使
computed
属性产生任何副作用,如
数据
变异。
最好将
populateAvailableMachines
函数移动到方法并只调用一次(例如,在挂载时)。

不建议使
计算的属性产生任何副作用,如
数据
变异。 最好将
populateAvailableMachines
函数移动到方法并只调用一次(例如,在挂载时)。

使用watcher

watch: {
  userData: {
    handler: function (val, oldVal) {
      if(this.availableMachines.length > 0){
        // put your populate logic here
      }
    },
    deep: true
  }
},
此外,您可能需要在创建的
或装入的
钩子中初始化数据(
userData
availableMachines

watch: {
  userData: {
    handler: function (val, oldVal) {
      if(this.availableMachines.length > 0){
        // put your populate logic here
      }
    },
    deep: true
  }
},

此外,您可能需要在
创建的
挂载的
钩子中初始化数据(
userData
availableMachines
)!我已经尝试过了,但是当我将computed属性移动到methods时,
this.userData
是一个空对象(没有填充我需要的实际值)。为了填充它,我在另一个页面上运行了一个操作。另外,我不认为我产生了任何
数据
突变,我只是在我的组件中设置了一个数组作为getter的数据。你可以通过执行
这个.availableMachines.push来突变数据。为什么不在将获取结果保存到
this.userData
之后立即以方法运行
populateAvailableMachines
?您好,先生,谢谢您的反馈!我已经尝试过了,但是当我将computed属性移动到methods时,
this.userData
是一个空对象(没有填充我需要的实际值)。为了填充它,我在另一个页面上运行了一个操作。另外,我不认为我产生了任何
数据
突变,我只是在我的组件中设置了一个数组作为getter的数据。你可以通过执行
这个.availableMachines.push来突变数据。为什么不在将获取结果保存到this.userData
之后立即将
populateAvailableMachines
作为一种方法运行呢?