簡體   English   中英

服務器端渲染,角度5和訂閱。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM