ngOnInit在构造函数之后未被调用:Angular 5

时间:2018-08-15 18:52:56

标签: angular

我正在使用Angular 5构建一个应用程序,我正面临这个问题,我导航到该路线,构造函数执行后停止执行,UI加载了一半,然后停止加载。我向ngOnInit添加了一些控制台日志,发现它没有被调用。但是,这仅在刷新身份验证令牌时才会发生。这是与令牌一起进行http调用的httpInterceptor代码。

    @Injectable()
    export class AuthHttpInterceptor implements HttpInterceptor {

      constructor( @Inject(DOCUMENT) private document: Element, private 
adalService: AdalService, private injector: Injector) { }

      intercept(request: HttpRequest<any>, next: HttpHandler): 
    Observable<HttpEvent<any>> {
        if (request.url !== '/config.json') {
        return this.getToken(request.url)
          .switchMap((token) => {
            if (this.adalService.userInfo) {
              this.adalService.userInfo.isAuthenticated = true;
            }
        this.removeAdalFrame();
        return next.handle(request.clone({ setHeaders: { Authorization: `Bearer ${token}` } }));
      }).catch((error: HttpErrorResponse) => {
        if (error.status == null) {
          console.log('Not recoverable error, logging out.');
          this.removeAdalFrame();
        }
        return Observable.throw(error);
      });
    } else {
      return next.handle(request.clone());
    }
  }

  private getToken(url): Observable<string> {
    return this.adalService.acquireToken(this.adalService.GetResourceForEndpoint(url)).delay(200);
  }

  private removeAdalFrame() {
    const iFrames = this.document.getElementsByTagName('iframe');
    for (let i = 0; i < iFrames.length; i++) {
      if (iFrames[i].id.startsWith('adalRenewFrame')) {
        iFrames[i].remove();
      }
    }
  }
}

因此,只要“ getToken”刷新令牌并在过期时到达microsoft生成新令牌,问题就会开始。一些特定的routerLink中断,即未加载子组件,某些输入属性未从父组件正确传播到子组件,等等。看起来好像发生了更改检测问题。但是,一旦我刷新了应用程序,一切就会再次按预期运行,也就是说,怪异的行为仅在令牌被刷新时才发生。重新发布应用程序后,一切都会恢复正常。

知道为什么会这样吗?

0 个答案:

没有答案