[英]Server side rendering, angular 5 and subscriptions.
我正在嘗試在angular 5應用程序上實現服務器端渲染。 構建並運行該應用程序后,一切都可以正常運行,但是頁面的源代碼無法正確呈現。 我發現,如果我使用訂閱和異步管道,則可以解決問題-屏幕上顯示的內容也在源代碼中。 但是,如果我嘗試通過管道傳遞訂閱並使用返回值執行任何操作,則html會正確顯示,但是源卻不正確。
正常工作時,這是在打字稿中實現的方式:
ngOnInit() {
this.httpResponse$ = this._dataService
.send(new BrochureRequest(this._stateService.params.propertyId));
}
這是HTML
<div *ngIf="httpResponse$ | async as httpResponse; else loading">
{{content goes here}}
</div>
在這種情況下,信息顯示在屏幕上,即html等待異步響應-至關重要的是-屏幕上的所有數據都反映在源中。
但是,在許多情況下,我會希望對從服務返回的數據執行某些操作-SEO,廣告定位等...在這種情況下,我想做這樣的事情
ngOnInit() {
this.httpResponse$ = this._dataService
.send(new BrochureRequest(this._stateService.params.propertyId)).pipe(
tap((httpResponse) => {
this.activeLink =
this._headerService.getActiveLink(this.httpResponse.Id);
this._seoService.setSeoDetails(this.httpResponse.SeoDetails);
// do more stuff
return httpResponse;
}));
}
在這種情況下,該信息將按預期方式顯示在屏幕上,並調用所有其他功能,但是該組件中的任何內容均未顯示在源中。 就像html最初是在沒有任何數據的情況下提供的,並且在填充數據時並未更新。
為什么我沒有在頁面源代碼中獲取所有數據的任何想法? 有沒有辦法我可以延遲任何HTML渲染,直到返回httpResponse
?
也許您可以使用ngAfterViewChecked之類的事件? 在此處閱讀有關角度生命周期掛鈎的更多信息https://angular.io/guide/lifecycle-hooks
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.