Получение события, когда angular перейти к модулю или от него - PullRequest
0 голосов
/ 01 мая 2020

Предположим, у меня есть 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, только определение класса. этот подход также создает проблемы с суб-маршрутами. Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...