@slan-health/taro-vueuse
Version:
taro vue版本hooks
50 lines (49 loc) • 1.41 kB
JavaScript
import Taro from "@tarojs/taro";
import { onMounted, onUnmounted } from "vue";
const safeNamespace = ["__taro", "at"];
function wrapperEvent(namespace, eventName) {
return namespace ? `${namespace}.${eventName}` : eventName;
}
const createEventCenter = () => Taro.eventCenter;
function useEvent(namespace) {
const events = createEventCenter();
const emitEvent = (eventName, ...params) => {
if (!eventName) {
console.warn("eventName not provide");
return;
}
const realEventName = wrapperEvent(namespace, eventName);
events.trigger(realEventName, params);
};
const setListener = (eventName, ...handlers) => {
if (!eventName || safeNamespace.some((v) => eventName.startsWith(v))) {
console.warn("eventName not valid. listen failed");
} else if (!handlers.length) {
console.warn("you mast provide one handler to listen. add failed");
} else {
const realEventName = wrapperEvent(namespace, eventName);
onMounted(() => {
handlers.forEach((handler) => {
events.on(realEventName, handler);
});
});
onUnmounted(() => {
events.off(realEventName);
});
}
};
const removeAllListener = () => {
events.off();
};
return {
emitEvent,
setListener,
removeAllListener
};
}
export {
useEvent as default,
safeNamespace,
wrapperEvent
};
//# sourceMappingURL=index.js.map