初始化项目, 添加TDesign等包
This commit is contained in:
72
miniprogram/utils/subscribe.ts
Normal file
72
miniprogram/utils/subscribe.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
// 存储一个事件回调数组
|
||||
const listeners: { [key: string]: any[] } = {};
|
||||
|
||||
// 触发事件的函数
|
||||
function triggerEvent(key: string, data: any) {
|
||||
if (listeners[key]) {
|
||||
listeners[key].forEach((callback: any) => {
|
||||
callback(data);
|
||||
});
|
||||
}
|
||||
// 也可以触发一个通用的 'change' 事件
|
||||
if (listeners["change"]) {
|
||||
listeners["change"].forEach((callback: any) => {
|
||||
callback({ key, data });
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
type IFun = Function & { $$functionKey?: string };
|
||||
|
||||
export const Subscribe = {
|
||||
/**
|
||||
* 设置
|
||||
* @param key 订阅变量的key
|
||||
* @param value 值
|
||||
*/
|
||||
set(key: string, value: any) {
|
||||
// 1. 执行原有的存储操作
|
||||
// setStorage(key, value);
|
||||
// 2. 触发自定义事件,通知订阅者
|
||||
triggerEvent(key, value);
|
||||
},
|
||||
|
||||
// get(key: string) {
|
||||
// return getStorage(key);
|
||||
// },
|
||||
|
||||
remove(key: string) {
|
||||
triggerEvent(key, null); // 或者触发一个 'remove' 事件
|
||||
},
|
||||
|
||||
/**
|
||||
* 订阅事件
|
||||
* @param key 订阅变量的key
|
||||
* @param functionKey 唯一的函数key(用于取消订阅的)
|
||||
* @param callback 回调函数
|
||||
*/
|
||||
on(key: string, functionKey: string, callback: () => void) {
|
||||
if (!listeners[key]) {
|
||||
listeners[key] = [];
|
||||
}
|
||||
if (typeof callback == "function") {
|
||||
(callback as IFun)["$$functionKey"] = functionKey;
|
||||
listeners[key].push(callback);
|
||||
} else {
|
||||
console.log("订阅事件 callback 必须是函数");
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 取消订阅
|
||||
* @param key 订阅变量的key
|
||||
* @param functionKey 唯一的函数key(用于取消订阅的)
|
||||
*/
|
||||
off(key: string, functionKey: string) {
|
||||
if (!listeners[key]) return;
|
||||
listeners[key] = listeners[key].filter((cb: IFun) => cb.$$functionKey != functionKey);
|
||||
if (listeners[key].length == 0) {
|
||||
delete listeners[key];
|
||||
}
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user