2

Angular Universal がまだ開発中であることは知っています。そこで、外部 API サーバーから定期的に (Http サービス経由で約 10 秒ごとに) データを取得する Web アプリに Angular Universal を使用することを考えました。このデータは、Web アプリに表示されます。

簡単な解決策がまだ見つからないいくつかの問題に遭遇しました。

  1. Angular Universal は明らかに、ページをプリレンダリングするために API サーバーからのデータを必要とします。Web アプリの HTML が要求されるたびに、nodeJS から API サーバーにクエリを実行したくありません。nodeJS サーバーが 1 つのクライアント Web アプリ インスタンスとまったく同じように "動作" し、10 秒ごとに API サーバーにクエリを実行し、このデータを 10 秒間隔で "キャッシュ" し、それを使用して HTML をレンダリングするだけで十分です。
  2. クライアント Web アプリは、API サーバーからのデータをプライベート メンバー変数に格納します。このメンバー変数は、ngFor、バインディングなどで HTML を構築するために使用されます。しかし、このメンバー変数はもちろん最初は空/未定義です。Angular Universal (SEO ではなく、読み込み時間の短縮) のいくつかのアイデアが無効になるため、クライアント Web アプリが起動時に事前レンダリングされた HTML を消去することは望ましくありません。

ここで私が達成しようとしていることを理解していただければ幸いです。これにアプローチする方法を知っていますか、それとも「公式の」方法がありますか? そのようなことをしようとしているのは私だけではないと確信しています。

4

2 に答える 2

0

Angular Universal は、コードがサーバー コードかクライアント コードかを認識しません。アプリをサーバー上でレンダリングしようとします。しかし、あなたが述べたように、サーバーにクライアントとは異なる動作をさせたい場合があります。たとえば、Angular Universal がスキップする関数がある場合、このコード行を関数本体の先頭に置きます。

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

または、クライアントとは異なることをするためにサーバーが必要なシナリオがある場合は、これを行います

if (typeof window === "undefined") {
    // server code
} else {
   // client code
};
于 2016-11-13T12:38:45.800 に答える
0

Angular Universal には isNode と IsBrowser の 2 つの定数があります

if(isNode){

   // it's Node Server

} else {
  //it's Browser
}
于 2017-04-05T06:18:51.467 に答える