如何在應用程序中對我的數據進行基本初始化。例如,如果用戶登錄並按F5我需要在所有查詢開始之前從服務器請求當前用戶數據,例如獲取用戶訂單等。在Angular 1中,我們對此案例有.run()
指令。我怎麼解決這個問題?Angular 2應用程序庫初始化
2
A
回答
3
有幾種方法可以做到這一點:
您可以執行這樣引導您Angular2應用程序之前,一些要求。這樣的第一個請求可以依賴您保存到本地/會話存儲中的內容。
var injector = Injector.resolveAndCreate([HTTP_PROVIDERS]); var http = injector.get(Http); http.get('/userdetails').map(res => res.json()) .subscribe(data => { bootstrap(AppComponent, [ HTTP_PROVIDERS provide('userDetails', { useValue: data }) ]); });
詳情請參閱此問題:
你可以擴展HTTP請求能夠透明地獲取這些數據時請求實際執行。這將是一個懶惰的方法。
@Injectable() export class CustomHttp extends Http { constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, userDetailsService: UserDetailsService) { super(backend, defaultOptions); } request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> { console.log('request...'); return this.userDetailsService.getUserDetails().flatMap((userDetails) => { return super.request(url, options); }); } get(url: string, options?: RequestOptionsArgs): Observable<Response> { console.log('get...'); return this.userDetailsService.getUserDetails().flatMap((userDetails) => { return super.get(url, options); }); } }
實施
UserDetailsDetails
這樣:export class UserDetailsService { constructor(private http:Http) { } getUserDetails() { if (this.userDetails) { return Observable.of(this.userDetails); } else { return this.http.get(...) .map(...) .do(data => { this.userDetails = data; // Store in local storage or session storage }); } }
並註冊該
CustomHttp
類是這樣的:bootstrap(AppComponent, [HTTP_PROVIDERS, UserDetailsService, new Provider(Http, { useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, userDetailsService: UserDetailsService) => new CustomHttp(backend, defaultOptions, userDetailsService), deps: [XHRBackend, RequestOptions, UserDetailsService] }) ]);
看到這些問題的更多詳細信息:
事情可能也是在路由器出口的水平,如果你使用的路由來完成。可以實現一個自定義的路由器插座,用於在激活路由時檢查安全/用戶詳細信息。我認爲這是從你的需要遠一點......
看到這個問題的更多細節:
0
打電話之前你可以獲取當前用戶數據Angular2的bootstrap(...)
你也可以觸發事件(使用Observable
爲例),通知其他的登錄用戶現在已經知道,並開始只有進一步的請求收到此事件後。
相關問題
- 1. Angular 2只在應用程序初始化時調用服務
- 2. 在Angular 4應用程序中初始化第三方庫應用程序
- 3. Angular 2初始化緩慢
- 4. 需要異步初始化的提供程序的Bootstrap Angular 2應用程序
- 5. 應用程序初始化
- 6. Angular 2調用初始化API
- 7. Angular 2儀表板應用程序在初始化時調用web api
- 8. 在Angular(4)應用程序中初始化外部插件
- 9. Django應用程序初始化過程
- 10. Zend Framework 2教程:模塊(應用程序)無法初始化
- 11. Angular 2 rc1組件初始化
- 12. Angular 2服務的異步初始化
- 13. Angular 2 NGRX:誰初始化路由器?
- 14. Angular 2服務初始化邏輯
- 15. Swift 2中的指定初始化程序和便捷初始化程序
- 16. 應用程序初始化處理程序等效於角?
- 17. 應用程序的一次初始化
- 18. 如何當應用程序初始化
- 19. Android應用程序初始化
- 20. 「無法初始化應用程序0xc000005」
- 21. 初始化Android應用程序
- 22. 初始化vuejs應用程序
- 23. 類初始化中斷應用程序
- 24. nodester初始化應用程序錯誤
- 25. Catel應用程序初始化
- 26. JAX-RS應用程序的初始化
- 27. WPF應用程序初始化狀態
- 28. 在Angular 2中初始化第三方庫
- 29. 數據庫初始化 - 程序設計
- 30. Ping Angular 2應用程序
可能有很多,但你的問題是相當模糊。 –