2016-10-25 93 views
2

我知道Angular Universal仍在開發中。所以我想過使用Angular Universal來定期從外部API服務器提取數據的Web應用程序(大約每10秒通過Http服務)。這些數據會顯示在網絡應用程序中。Angular Universal + External API

我也碰到過,我還沒有找到一個簡單的解決方案,但幾個問題:

  1. 角通用顯然從API服務器需要的數據預呈現的頁面。每次請求Web應用程序HTML時,我都不想從nodeJS查詢API服務器。如果nodeJS服務器「表現得像」一個客戶端Web應用程序實例並且每隔10秒查詢API服務器就足夠了,「以10秒爲間隔緩存」這些數據並使用它來呈現HTML。
  2. 客戶端Web應用程序將來自API服務器的數據存儲在某個私有成員變量中。然後使用這個成員變量通過ngFor,bindings等來構建HTML。但是這個成員變量在開始時是空的/未定義的。我不希望客戶端Web應用程序在啓動時擦除分段HTML,因爲這樣會打敗Angular Universal(不是SEO,但減少加載時間)的一些想法。

我希望你明白我在這裏想達到的目標。你有沒有想法如何解決這個問題,還是有一種「官方」的方式來做到這一點?我相信我不是唯一一個試圖做這樣的事情的人。

+0

有你找到了解決這個問題的方法? –

+0

@RaymondtheDeveloper不幸的是沒有 – Julian

+0

@Julian對此有何更新? – Rakeschand

回答

0

Angular Universal不知道你的代碼是服務器代碼還是客戶端代碼,它只是把你的應用程序,並嘗試在服務器上呈現它。但正如你所提到的那樣,有一段時間你希望服務器的行爲與客戶端不同。例如,如果你有一個你希望Angular Universal會跳過的函數,把這行代碼放在函數體的頂部。

if (typeof window === "undefined") return; 

或者,如果您有需要服務器從客戶做不同的事情做到這一點

if (typeof window === "undefined") { 
    // server code 
} else { 
    // client code 
}; 
+0

但這只是他的問題的一半。我想他想要一種方法將已經在服務器上呈現的數據傳遞給瀏覽器。因爲它在服務器上獲取數據,而在瀏覽器上又獲取數據。這意味着更長的加載時間。你知道解決這個問題的方法嗎? –

0

角通用的場景有兩個常量isNode & IsBrowser

if(isNode){ 

    // it's Node Server 

} else { 
    //it's Browser 
}