2016-08-01 54 views
2

在我的Angular2應用程序中,我需要根據此調用的結果從AuthenticationService和引導應用程序調用某個函數。問題是AuthenticationService依賴於來自@ angular/http的HTTP,並且在調用引導函數之前我幾乎不知道如何手動構建http服務。在這個問題上接受的答案angular2 bootstrap with data from ajax call(s)描述了我想要完美實現的內容,但不幸的是它給了Angular2以前的版本。在引導Angular2應用程序之前進行AJAX請求

我試圖創建HTTP服務是這樣的:

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

,但我得到了XsrfCookieStrategy空引用異常或類似的東西。我相信可以注入一些空的XsrfStrategy,但它似乎更像是一種黑客而不是一個好的解決方案。所以問題是:是否有任何良好的(官方)方式來引導Angular2應用程序,並提供一些類似於上面添加的鏈接的前期依賴關係。

+1

你可以引導這只是沒有Ajax調用的組件,並把它引導你的真實成分......但實際上,你可能只是想你的主要組件程序,因此它可以顯示在通話之前也爲您的應用程序提供狀態,並自行進行通話。 –

+0

Jason,我想我可以在這裏看到你的意思,但是有沒有任何示例或代碼可以說明以這種方式構建的應用程序的想法?我想在引導程序中運行的代碼是主要和唯一的入口點,所以即使在路由變成事物之前,它也應該在任何路由(url)處執行。所以我想知道什麼是適當的角度來做到這一點。我認爲把這段代碼放在bootstrap.ts文件中將是一個好主意 –

+0

我還沒有找到一個「最好的方法」來做到這一點,但我也有同樣的問題。這就是爲什麼我發佈評論而不是答案,可能有更好的方法來做到這一點。你可以做什麼它有一個「ParentComponent」,你引導,並進行初始的API調用,只是讓它包括你的主要組件ngIf當你的初始調用完成時' –

回答

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

相關問題