vue3自定义指令

发布时间:2024年01月16日

下面是一个使用Vue3的自定义指令的示例代码:

import { createApp, DirectiveBinding } from 'vue';

const app = createApp({});

// 自定义指令:点击外部关闭弹窗
app.directive('click-outside', {
  mounted(el: HTMLElement, binding: DirectiveBinding) {
    const handler = (e: MouseEvent) => {
      if (!el.contains(e.target as Node)) {
        binding.value();
      }
    };

    document.addEventListener('click', handler);

    // 在组件卸载时移除事件监听器
    const unmount = () => {
      document.removeEventListener('click', handler);
    };

    // 在组件更新时重新绑定事件监听器
    app.mixin({
      beforeUnmount: unmount
    });
  }
});

app.mount('#app');

在上面的代码中,我们定义了一个名为click-outside的自定义指令。这个指令用于实现点击元素外部关闭弹窗的功能。

在指令的mounted钩子函数中,我们绑定了一个事件监听器,当点击页面其他位置时,会触发指令的binding.value,也就是传入的回调函数。这样就可以通过在组件中使用v-click-outside指令,并传入一个回调函数来实现点击元素外部关闭弹窗的效果。

同时,我们还通过混入beforeUnmount钩子函数,在组件卸载时移除事件监听器,避免内存泄漏。这样,在组件被销毁时,会自动移除对应的事件监听器。

你可以将上面的代码复制到一个Vue3项目中的main.ts文件中,然后在组件的模板中使用v-click-outside指令来实现点击元素外部关闭弹窗的功能。

文章来源:https://blog.csdn.net/m0_74801194/article/details/135625593
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。