press-next
Version:
Vue3 组件库,支持 Composition API
28 lines (22 loc) • 697 B
text/typescript
export const ClickOutsideMixin = (config: {
event: string;
method: string;
selector?: string;
}) => ({
data(this: any) {
const clickOutsideHandler = (event: { target: any }) => {
const ele: HTMLElement = config.selector ? document.querySelector(config.selector) : this.$el;
if (ele && !ele.contains(event.target)) {
this[config.method]?.();
}
};
return { clickOutsideHandler };
},
mounted(this: any) {
document.addEventListener(config.event, this.clickOutsideHandler);
},
beforeDestroy(this: any) {
document.removeEventListener(config.event, this.clickOutsideHandler);
},
});
export const clickOutsideMixin = ClickOutsideMixin;