javascript - 如何动态添加 Vue 生命周期监听器

标签 javascript vuejs2

我有一些函数需要在 vue 组件被销毁时调用,但在事件创建之前我不一定知道它们是什么。

有没有办法为 vue 生命周期事件动态添加监听器?

我要实现的目标:

...methods: {
    logOnDestroy(txt) {
        this.$on('beforeDestroy', () => {
            console.log(txt)
        }
    }
}

但是目前还没有调用它。有没有其他方法可以在运行时以编程方式将监听器绑定(bind)到组件生命周期事件?

最佳答案

你可能会问,能不能简单点?

来自 Vue.js Component Hooks as Events , 这就是你要找的语法

this.$once('hook:beforeDestroy', () => {

我不确定您打算如何使其动态化,但这里是对 Vue CLI 的默认 HelloWorld 应用程序中的 logOnDestroy() 方法的改编,

演示

Vue.component('helloworld', {
  template: '<h1>{{ msg }}</h1>',
  name: 'helloworld',
  props: { msg: String },
  mounted() {
    this.logOnDestroy('Goodbye HelloWorld')
  },
  methods: {
    logOnDestroy(txt) {
      this.$once('hook:beforeDestroy', () => {
        console.log(txt)
      })
    }    
  }
});

new Vue({
  el: '#app',
  data: {
    showHello: true
  },
  mounted() {
    setTimeout(() => {
      this.showHello = false
    }, 3000)
  }
});
Vue.config.productionTip = false
Vue.config.devtools = false
<script src="https://unpkg.com/vue"></script>
<div id="app">
  <img alt="Vue logo" src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/277px-Vue.js_Logo_2.svg.png" style="height: 50px;">
  <helloworld v-if="showHello" msg="Welcome to Your Vue.js App"/>
</div>

关于javascript - 如何动态添加 Vue 生命周期监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931936/

相关文章:

vue.js - Vue中如何处理错误

javascript - 如何访问 vuetify.js 2 中 v-data-table 之外的总项目?

javascript - 网页挂起直至清除缓存

javascript - Vuejs 使用 Props 访问模态组件中的数据

vue.js - 如何监听在 vue js 中以编程方式创建的子事件?

javascript - MongoDB - 如何使用 [Object] 作为字段构建查询字符串

javascript - 如何使用 Vue.js 向基于 Prop 的元素添加多个类?

javascript - 了解 RequireJS : What exactly is passed to the anonymous function?

javascript - 在 JavaScript 中打印数字的递归函数

javascript - 无法让导航菜单 slideToggle 工作