在引导Angular2应用程序之前发出AJAX请求

时间:2016-08-01 19:55:36

标签: angular bootstrapping

在我的Angular2应用程序中,我需要根据此调用的结果调用AuthenticationService和bootstrap应用程序中的某些函数。问题是AuthenticationService依赖于来自@ angular / http的HTTP,我对如何在调用bootstrap函数之前手动构建http服务知之甚少。这个问题中接受的答案/taxonomies/category描述了我想要完美实现的目标,但不幸的是,它被用于Angular2的某些先前版本。

我尝试以这种方式创建http服务:

let injector = ReflectiveInjector.resolveAndCreate(HTTP_PROVIDERS)
let http = injector.get(Http);

但我在XsrfCookieStrategy或类似的东西中得到了空引用异常。我相信有可能注入一些空的XsrfStrategy,但它似乎更像是一个黑客而不是一个好的解决方案。所以问题是:是否有任何好的(官方)方式来引导Angular2应用程序,并提供一些类似于我上面添加的链接的前端依赖。

1 个答案:

答案 0 :(得分:1)

class AuthService {
  isLoggedIn:BehaviorSubject<boolean> = BehaviorSubject<boolean>(false);
  checkLogin(http:Http) {
    return http.get(...)
    .map(result => result.json())
    .do(result => this.isLoggedIn.next(result)
  }
}

bootstrap(AppComponent, [
  HTTP_PROVIDERS,
  AuthService,
  { provide: APP_INITIALIZER, 
    useFactory: (authService:AuthService) => authService.checkLogin(),
    deps: [AuthService],
    multi: true
  }
]);

另见How to pass parameters rendered from backend to angular2 bootstrap method