取消订阅路由器事件

时间:2021-05-21 09:29:13

标签: angular ngrx-effects

登录后被重定向到上一个站点后,我正在为路由而苦苦挣扎。例如,如果我没有登录,我将调用“localhost:4200/results”,我将被定向到“localhost:4200?returnUrl”的登录=%2Fresults#登录”。重定向有效,但如果我想在导航栏中导航到“localhost:4200/dashboard”,则它不起作用。它显示“localhost:4200/dashboard” 1 秒,但没有路由,url 仍然显示“localhost:4200/results”。尝试取消订阅。没用...

效果.ts

@Effect()
signInSuccess$ = this.actions$.pipe(
ofType(AuthActions.signInSuccessAction),
map(action => {
  const authenticatedUser = action.user;
  if (authenticatedUser.competenceCenterMappings.length === 0) {
    return openModal({component: CreateCompetenceCenterComponent});
  } else  {
    const returnUrl = this.prevRouteService.redirectUrl;
    this.router.events.pipe(
      filter(event => event instanceof NavigationEnd),
    ).subscribe(() => {
      this.router.navigateByUrl(returnUrl);
    }).unsubscribe();
    return closeModal();
  }
})
);

auth-guard.ts

  canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return combineLatest([
  this.store.select(AuthenticationStore.Selectors.isAuthenticated),
  this.store.select(AuthenticationStore.Selectors.getUser)
]).pipe(
  mergeMap(
    ([isAuthenticated, authUser]) => isAuthenticated ? this.handleEnvironment(authUser) : this.router.navigate([], {
      fragment: 'login',
      queryParams: { returnUrl: state.url }
    })
  )
);

0 个答案:

没有答案