--- tags: brew-js --- # Router events ### `navigate` event Fired when the app is about to navigate to a new path. ```typescript app.on('navigate', (e) => { /* ... */ }); ``` The event object has the interface: ```typescript { readonly pathname: string; readonly oldPathname: string; readonly oldStateId: string; readonly newStateId: string; readonly route: Readonly<RouteParam>; readonly data: any; } ``` If `app.path` is updated in this event, the app will redirect to the new path, skipping the current one. ```typescript app.on('navigate', ({ oldPathname, pathname, route }) => { if (pathname !== '/my-page') { // both works the same app.path = '/page-not-found'; app.navigate('/page-not-found'); } }); ``` :::info Note that `app.path` is not yet updated during `navigate` event. ::: ### `beforepageload` event It is similar to `navigate` event but after `app.path` is updated. Also it it possible to delay the completion of navigation process: ```typescript! app.on('beforepageload', e => { e.waitFor(someAsyncOperation()); }); ``` Similarly, any further navigation during this phase will cause the previous navigation to be cancelled. The event object has the interface: ```typescript { readonly pathname: string; readonly data: any; } ```