VUE - vue3 自定义指令

VUE - vue3 自定义指令

    <div v-if="visCardRef" v-click-outside="hideDiv"
        style="border: 1px solid red;background-color: gray;width: 200px;height: 200px;">
    </div>

 

const hideDiv = () => visCardRef.value = false;
复制代码
// 自定义指令
const vClickOutside = {
    beforeMount(el: any, binding: any) {
        debugger;
        let clickOutsideEvent = (event: any) => {
            debugger;
            // 点击外部时触发
            if (!(el === event.target || el.contains(event.target))) {
                binding.value(); // 调用hideDiv函数
            }
        };
        debugger;
        document.addEventListener('click', clickOutsideEvent);
        el.clickOutsideEvent = clickOutsideEvent;
    },
    unmounted(el: any) {
        debugger;
        document.removeEventListener('click', el.clickOutsideEvent);
    },
};
复制代码

 

方式2

测试功能,点击div外部,关闭div

创建文件:directives.ts

复制代码
// 自定义指令
export const clickOutside = {
  beforeMount(el: any, binding: any) {
    debugger;
    let clickOutsideEvent = (event: any) => {
      debugger;
      // 点击外部时触发
      if (!(el === event.target || el.contains(event.target))) {
        binding.value(); // 调用hideDiv函数
      }
    };
    debugger;
    document.addEventListener('click', clickOutsideEvent);
    el.clickOutsideEvent = clickOutsideEvent;
  },
  unmounted(el: any) {
    debugger;
    document.removeEventListener('click', el.clickOutsideEvent);
  },
};

export default {
  clickOutside,
};
复制代码

 

 

在main.ts中注册

import directives from '@/core/directives';

for (const [name, directive] of Object.entries(directives)) {
  app.directive(name, directive);
}

 

 

在页面中使用

    <div v-if="visCardRef" v-click-outside="hideDiv"
        style="border: 1px solid red;width: 200px;height: 200px;">
    </div>

 

const hideDiv = () => visCardRef.value = false;

 

posted @   无心々菜  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2016-01-21 5.原型模式(Prototype)
2016-01-21 4.工厂方法模式(Factory Method)
点击右上角即可分享
微信分享提示