Angular2在启动时重定向到路由

Angular2在启动时重定向到路由,angular,angular2-routing,ngrx,Angular,Angular2 Routing,Ngrx,我正在使用@ngrx/store和可观测数据。我有一个用户缩减器,用于设置有关用户的信息,包括用户的JWT NavigationService被注入根AppComponent,它订阅用户模型,并根据用户令牌的存在进行路由。UserService读取本地存储,并将结果分派给userreducer 问题是,当我尝试使用goToLogin()路由到主页时,我得到了下面的错误…这并没有提供太多信息 我猜路线组件尚未设置。有没有办法在路由之前等待应用程序加载?或者下面的错误是否表明存在不同的问题 @Inj

我正在使用
@ngrx/store
和可观测数据。我有一个用户缩减器,用于设置有关用户的信息,包括用户的JWT

NavigationService
被注入根
AppComponent
,它订阅
用户
模型,并根据用户令牌的存在进行路由。
UserService
读取本地存储,并将结果分派给
user
reducer

问题是,当我尝试使用
goToLogin()
路由到主页时,我得到了下面的错误…这并没有提供太多信息

我猜路线组件尚未设置。有没有办法在路由之前等待应用程序加载?或者下面的错误是否表明存在不同的问题

@Injectable()
export class NavigationService {
  private subscription: any;

  constructor(public router:Router, private userService: UserService) {
    this.subscription = this.userService.token$.subscribe(token => {
       if (token) {
         this.goToSecretStuff();
       } else {
         this.goToLogin();
       }
    });
  }


TypeError: Cannot read property 'constructor' of undefined
    at Object.implementsOnDestroy (pipe_lifecycle_reflector.ts:2)
    at Function.ChangeDetectionUtil.callPipeOnDestroy (change_detection_util.ts:209)
    at AbstractChangeDetector.ChangeDetector_CohortList_0.dehydrateDirectives (viewFactory_CohortList:91)
    at AbstractChangeDetector.dehydrate (abstract_change_detector.ts:177)
    at AbstractChangeDetector.destroyRecursive (abstract_change_detector.ts:200)
    at AbstractChangeDetector.destroyRecursive (abstract_change_detector.ts:207)
    at AbstractChangeDetector.destroyRecursive (abstract_change_detector.ts:207)
    at AppView.destroy (view.ts:159)
    at AppViewManager_.destroyViewInContainer (view_manager.ts:286)
    at ViewContainerRef_.remove (view_container_ref.ts:166)
    at ComponentRef_.dispose [as _dispose] (dynamic_component_loader.ts:283)
    at ComponentRef_.dispose (dynamic_component_loader.ts:87)
    at router_outlet.ts:108
    at e.run (zone-microtask.min.js:8)
    at e.run (ng_zone.ts:371)
    at zone-microtask.min.js:8
    at z (zone-microtask.min.js:8)
    at A (zone-microtask.min.js:8)
    at zone-microtask.min.js:8
    at zone-microtask.min.js:1
    at microtask (ng_zone.ts:410)
    at e.run (zone-microtask.min.js:8)
    at e.run (ng_zone.ts:371)
    at zone-microtask.min.js:8
    at MutationObserver.h (zone-microtask.min.js:8)

正如@nathasm在评论中提到的,像这样的接缝是一个已知的bug

解决方法是在以下情况下/当管线组件抛出错误时,从管线组件的模板中删除
async
管道:

TypeError:无法读取未定义的属性“构造函数”

更新: 我一直在研究这个问题,但没有找到任何方法来避免管道错误;(甚至尝试创建我自己的
|asynx
管道。我发现解决这个问题的最好方法(并且只需很少的更改)是订阅
构造函数()
,并在
路由激活()


我遇到了完全相同的问题。几个小时后我找不到解决方案,但我想我找到了原因-这是路由组件模板中的
async
管道。它是
unsubscribe()
和主机组件的
onDestroy())
冲突导致此错误。如果您能确认您的代码,我们可以报告一个错误…哇,您是如何发现的?看起来您的假设是正确的。我从模板中删除了
| async
,它成功了。显然,这是一个已知的问题:和
  constructor(public store: Store<any>, private _cdref: ChangeDetectorRef) {
    // this.items$ = this.store.select('items');
    this.store.select('items')
      .subscribe(items => this.items = items);
  }
  routerOnActivate(next, prev) {
    this._cdref.markForCheck();
  }
export class ItemListRoute extends _BaseRoute {
  public items: any;
  constructor(public store: Store<any>) {
    super(store);
    this.store.select('items')
      .subscribe(items => this.items = items);
  }
}