繁体   English   中英

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

[英]How to run a vue computed property only once?

我有一个填充数组的计算属性,但是后来我正在使用该数组(从&推入),并且我希望一旦数组为空,就保持为空(所说的计算属性不要再次填充它)。我能做到吗? 我使用的是计算属性,因为我是通过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));
},

我要实现的是,一旦将所有可用机器数组中的值都移到选定的机器数组中,就不要重新运行填充空的可用机器数组的计算属性。

不建议使computed属性产生任何副作用,例如data变异。 最好将populateAvailableMachines函数移至方法并仅调用一次(例如,在安装时)。

请改用观察者。

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

此外,您可能需要在createdmounted挂钩中初始化数据( userDataavailableMachines )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM