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); history.pushState({}, '', base + url);
this.react(); this.react();
}, },
emit(event, params) { emit(eventName, params) {
Events.history.unshift({ event, params }); Events.history.unshift({ eventName, params });
Events.history.length = Math.min(Events.history.length, 50); 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) { on(eventName, callback) {
if (! Events.entries[event]) Events.entries[event] = []; if (! Events.entries[eventName]) Events.entries[eventName] = [];
Events.entries[event]?.push(callback); Events.entries[eventName]?.push(callback);
return {
recall: () => {
for (let e of Events.history)
if (e.eventName === eventName)
return callback(e.params);
}, },
recall(event) { cancel: () => {
return Events.history.find(e => e.event === event); let callbacks = Events.entries[eventName];
}, this.on(eventName, () => Events.entries[eventName] = callbacks);
cancel(event) { }
let callbacks = Events.entries[event]?.splice(0, 50); };
this.on(event, () => Events.entries[event] = callbacks);
} }
} }