Предположим, у меня есть DevicesModule и маршрут определен как обычно:
{ path: 'devices', loadChildren: () => import('./pages/devices/devices.module').then(mod => mod.DevicesModule) }
Я хочу получать события при переходе к «/ устройствам» или от него, причина в том, что модуль предоставляет сервис, который содержит данные, которые я хочу очистить из памяти при переходе от страницы. На самом деле, навигация от модуля более важна, чем навигация к нему.
У меня есть несколько идей, но каждая из них предполагает создание целого механизма. Я искал и не мог найти ясный и простой способ сделать это, что-то встроенное в angular.
некоторые из идей, которые у меня были: 1. использовать охранники на маршруте - canActivate и canDeactivate.
{ path: 'devices', loadChildren: () => import('./pages/devices/devices.module').then(mod => mod.DevicesModule), canActivate: [ToModuleGuard], canDeactivate: [FromModuleGuard] }
Я могу получить имя класса и ссылку на экземпляр DevicesModule, но только при вызове закрытой переменной в routeConfig. Это своего рода взломать, и это не желательно. 2. получить маршрут маршрута в конструкторе DevicesModule и использовать его в страже.
router.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe(routerData => {
someService.addPath(routerData.url, this);
});
Я не проверял, работает ли он с дополнительными маршрутами, и как он работает с параметрами маршрута. 3. переопределите функцию then в пути маршрута:
const a = import('./pages/devices/devices.module').then(mod => {
const module = mod.DevicesModule;
someService.addPath('/devices', module);
return module;
});
это не обеспечивает экземпляр DevicesModule, только определение класса. этот подход также создает проблемы с суб-маршрутами. Спасибо за любую помощь.