2016-06-21 15 views
0

Ember 2.5でローディング画面を実装する最適な方法は何ですか?私が達成したいのは、スプラッシュ画面を表示する - >バックグラウンドでデータをロードする - > DOMが準備ができたらスプラッシュ画面を隠すことです。Ember JSスプラッシュスクリーンの実装/スタートアップ画面の実装

私はいくつかのオプションを試しましたが、ドキュメントの準備ができたらスプラッシュ画面を隠すことはできません。私は大きなテーブルをロードしていますので、DOMを終了するまでに時間がかかるので、モデル対応は正しいフックではありません。

答えて

1

私はアプリ/ index.htmlをにカスタムHTML(シンプル負荷DIV)を追加することによって、これをしなかった:

<body> 
    <div class="loading-overlay" id="initialLoading"></div> 

    {{content-for "body"}} 

    <script src="assets/vendor.js"></script> 
    <script src="assets/event.js"></script> 

    {{content-for "body-footer"}} 
</body> 

は、その後、私は私のアプリ/アプリケーション/ route.jsに以下を追加:

actions: { 
    loading(transition/* , originRoute*/) { 
    let controller = this.get('controller'); 
    if(controller) { 
     controller.set('currentlyLoading', true); 
    } 
    transition.promise.finally(function() { 
     $("#initialLoading").remove(); 
     if(controller) { 
     controller.set('currentlyLoading', false); 
     } 
    }); 
    } 
} 
だから何が起こるん

{{#if currentlyLoading}} 
    <div class="loading-overlay"></div> 
{{/if}} 

:私も負荷のdivを追加しなければならなかった私のアプリ/アプリ/ template.hbsで

  1. index.htmlがロードされており、まだjavascriptが解析されていません。読み込み画面が表示されます。
  2. index.htmlが読み込まれ、JavaScriptが解析されました。 ember.jsは読み込みアクションを呼び出し、currentlyLoadingをtrueに設定します。両方の読み込み画面が表示されます。
  3. 移行が完了し、最初の読み込みと2番目の読み込み画面が削除されます。現在進行中のすべての移行について、
  4. が読み込まれます。この動作を削除するには、2番目の読み込み画面ロジックを削除します。

私はそれが役に立ちそうです。

+1

ありがとうございます、完璧に動作します!これに関するいくつかの文書があります:https://guides.emberjs.com/v2.5.0/routing/loading-and-error-substates/ – Lopo

関連する問題