问题
In my Angular2 application I need to make a call to some function from AuthenticationService and bootstrap application based on results of this call. The problem is that AuthenticationService has dependency on HTTP from @angular/http and I have very little idea of how to build http service manually before calling bootstrap function. Accepted answer in this question angular2 bootstrap with data from ajax call(s) describes what I want to achieve perfectly, but unfortunately it was given to some previous version of Angular2.
I tried to create http service this way:
let injector = ReflectiveInjector.resolveAndCreate(HTTP_PROVIDERS)
let http = injector.get(Http);
but I got null reference exception in XsrfCookieStrategy or something like that. I believe it is possible to inject some empty XsrfStrategy, but it seems to be more like a hack than a good solution. So the question is: are there any good (official) way to bootstrap Angular2 application with providing some dependencies up-front similar to the link I added above.
回答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
}
]);
See also How to pass parameters rendered from backend to angular2 bootstrap method
来源:https://stackoverflow.com/questions/38707076/make-ajax-request-before-bootstrapping-angular2-application