vuejs2:我怎么能摧毁一个观察者?

时间:2017-10-28 08:47:13

标签: vuejs2 watch destroy

我怎样才能摧毁这个观察者?我的子组件中只需要一次,当我的异步数据从父组件加载时。

export default {
    ...
    watch: {
        data: function(){
            this.sortBy();
        },
    },
    ...
}

gregor;)

3 个答案:

答案 0 :(得分:7)

如果你通过调用vm。$ watch函数动态构造一个观察者,它会返回一个函数,可以在以后调用该函数来禁用(删除)该特定的观察者。

不要像在代码中那样静态地将观察者放在组件中,而是执行以下操作:

created() {
   var unwatch = this.$watch(....)
   // now the watcher is watching and you can disable it
   // by calling unwatch() somewhere else; 
   // you can store the unwatch function to a variable in the data
   // or whatever suits you best 
} 

可以从这里找到更全面的解释:https://codingexplained.com/coding/front-end/vue-js/adding-removing-watchers-dynamically

答案 1 :(得分:0)

这里是一个例子:

<script>
export default {
  data() {
    return {
      employee: {
        teams: []
      },
      employeeTeamsWatcher: null,
    };
  },

  created() {
    this.employeeTeamsWatcher = this.$watch('employee.teams', (newVal, oldVal) => {
      this.setActiveTeamTabName();
    });
  },

  methods: {
    setActiveTeamTabName() {
      if (this.employee.teams.length) {
        // once you got your desired condition satisfied then unwatch by calling:
        this.employeeTeamsWatcher();
      }
    },
  },
};
</script>

答案 2 :(得分:0)

如果您使用 vue2 插件或 composition-api 使用 vue3,您可以使用由 WatchStopHandle 返回的 watch 例如:

    const x = ref(0);

    setInterval(() => {
      x.value++;
    }, 1000);

    const unwatch = watch(
      () => x.value,
      () => {
        console.log(x.value);
        x.value++;

        // stop watch:
        if (x.value > 3) unwatch();
      }
    );

对于这种东西,你可以研究一下API的类型声明,这很有帮助,只需将鼠标悬停在它上面,它就会提示你可以做什么: enter image description here