在首次运行时不会触发路由器事件

时间:2020-06-15 12:24:55

标签: angular asynchronous router

我有home.component,其中的卡片重定向到动态加载的组件,这与点击部分中的卡片不同:

<card [routerLink]="['/workspace', section.name]">

单击后,它应该将适当的路由传递给登录组件,因此我们存储了登录后要访问的适当路由。我们有一个登录组件,该组件调用(我在NgOnInit和构造函数上都尝试过)一条路由服务逻辑如下:

login.component:

constructor(private loginService: LoginService, private router: Router,
               private routesService: RoutesService) { }

  ngOnInit() {
    this.loginService.logout();
    this.lastRouteVisited = this.routesService.getCurrentAndPreviousRoute();
    .........................................
  }

routes.service:

constructor(private router: Router) { }

  getCurrentAndPreviousRoute() : string {
    const vm = this;
    this.router.events.pipe(filter((evt: any) => evt instanceof RoutesRecognized), pairwise())
      .subscribe((events: RoutesRecognized[]) => {
          if(!events[0].urlAfterRedirects.includes("login") &&
                (vm.routesLinks.length == 0 || vm.routesLinks[vm.routesLinks.length-1].name != events[0].urlAfterRedirects)) {
            vm.routesLinks.push({name: events[0].urlAfterRedirects});
            vm.lastVisitedRoute = vm.routesLinks[vm.routesLinks.length-1].name;
          }
      }
    );
    return vm.lastVisitedRoute;
  }

问题是首次加载应用程序时,routes.service中的suscribe()方法无法启动,好像无法订阅到RoutesRecognized实例一样,因此登录后我被重定向到home.component而不是指定的工作区组件。另一方面,每当我返回主页时,触发相同事件(单击同一张卡片)时,就好像已经初始化RoutesRecognized一样,可以从home.component中的[routerLink]获取路由。 html,suscribe方法启动,我们被正确地重定向到workspace.component。

0 个答案:

没有答案