add router event handling helper methods

This commit is contained in:
break27 2024-10-30 15:37:06 +08:00
parent 3eb27c48ea
commit 92d42b0f69

View File

@ -41,21 +41,26 @@ export default {
history.pushState({}, '', base + url);
this.react();
},
emit(event, params) {
Events.history.unshift({ event, params });
emit(eventName, params) {
Events.history.unshift({ eventName, params });
Events.history.length = Math.min(Events.history.length, 50);
Events.entries[event]?.forEach(fn => fn(params));
Events.entries[eventName]?.forEach(fn => fn(params));
},
on(event, callback) {
if (! Events.entries[event]) Events.entries[event] = [];
Events.entries[event]?.push(callback);
},
recall(event) {
return Events.history.find(e => e.event === event);
},
cancel(event) {
let callbacks = Events.entries[event]?.splice(0, 50);
this.on(event, () => Events.entries[event] = callbacks);
on(eventName, callback) {
if (! Events.entries[eventName]) Events.entries[eventName] = [];
Events.entries[eventName]?.push(callback);
return {
recall: () => {
for (let e of Events.history)
if (e.eventName === eventName)
return callback(e.params);
},
cancel: () => {
let callbacks = Events.entries[eventName];
this.on(eventName, () => Events.entries[eventName] = callbacks);
}
};
}
}