javascript - 向 Vue 实例的 destroy 钩子(Hook)添加回调

标签 javascript vue.js

我有一个 Map,其中的键是 Vue 组件的实例,例如:

const instanceA = new Vue({...});
const instanceB = new Vue({...});

const register = new Map();
function registerInstance(instance){
    register.set(instance, []);
}

如何 Hook Vue 组件销毁的回调?我希望当组件被销毁时,我会从我的 Map 寄存器中删除它的引用。像这样的东西:

function registerInstance(instance){
    register.set(instance, []);
    instance.onDestroy(() => {
        register.set(instance, null);
        register.delete(instance);
    });
}

这会进行适当的清理以避免内存泄漏,但不确定如何向 Vue 实例的销毁过程添加回调...

我不想在每个组件的 beforeDestroydestroyed 函数中添加此逻辑。我想从组件外部添加它们,只需使用其实例指针...

<小时/>

我考虑过用一个调用我的代码的函数来重写instance.beforeDestroyed,然后调用实例中的原始instance.beforeDestroyed。但这感觉很不对

最佳答案

好的,看起来我们可以使用 instance.$once("hook:beforeDestroy", () => { 向钩子(Hook)添加回调!

一个例子是:

const instance = new Vue({});

instance.$once("hook:beforeDestroy", () => {
  console.log('Destroying!');
});

setTimeout(() => {
  instance.$destroy();
}, 1000);
<script src="https://vuejs.org/js/vue.min.js"></script>

关于javascript - 向 Vue 实例的 destroy 钩子(Hook)添加回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57058864/

相关文章:

javascript - Javascript构造函数属性有什么意义?

javascript - SVG 背景图像中的旋转条纹

javascript - 将对象附加到 Javascript 数组

vue.js - 在 Vuex 模块 Action 中访问 vue-axios

javascript - 如何使转换 ‘appear’ 在第二次加载而不是初始加载时工作

javascript - Vue Canvas $ref 未在调整大小时定义。抛出错误但作品似乎仍然有效?

javascript - Fancybox 图片库不起作用。有人可以帮忙吗?

javascript - 我如何知道用户的位置

css - 无论如何要去除阴影,或强制 vuetify 菜单与屏幕左侧完全对齐?

vue.js - vuejs中watch方法和计算方法有什么区别