9

バックグラウンドで非同期に処理されているデータがあり、これが完了するまで AngularJS アプリケーション全体の初期化を遅らせたいと考えています。

BackgroundData.initialized は Q promise であるため、次のようになります。

BackgroundData.initialized.then(AngularDoYoStuff)

私が遭遇する問題は、ホームページのコントローラーが初期化手順を開始し、BackgroundData にヒットし、データが間違っているかデータがないことです。

Angular の初期化をラップして、dom-ready だけでなく、dom-ready と BackgroundData.initialization の両方を待機する関数は何ですか?

アップデート

手動ブートストラップに関するドキュメントに近づきました:

angular.element(document).ready ->
  setupGA()
  window.BackgroundData = new DataMachine()
  BackgroundData.initialized.then ->
    angular.bootstrap(document)

ただし、コントローラー ファイルが (このファイルの後に) 読み込まれると、BackgroundData が定義される前にまだ初期化されています。

更新 2

HTMLのディレクティブを削除すると、問題が修正されたように見えますが (Angular に自動初期化を指示していたため)、すべての呼び出しがng-app無視されるようになりました。angular.module

4

3 に答える 3

9

ng-app問題は、Angular にそのスコープを自動初期化するよう指示するディレクティブを html タグに残していたことです。それを削除すると、手動の初期化が正しく実行されました。

于 2013-03-12T18:15:57.083 に答える
0

アプリでルートを使用している場合にこれにアプローチする 1 つの方法は、アプリを初期化して、データが利用可能になるまでルートの定義を待機することです。

つまり、ユーザーフレンドリーな「読み込み」メッセージを提供し、その後機能を読み込みます。

必要な場所に注入してから$route、次のように呼び出すことができます。

$route.routes["/RouteName/:param"] = {templateUrl:"template.html", reloadOnSearch:true, controller:"ControllerName"};

その後、$route.reload()または$rootScope.apply()リフレッシュするために電話してください。

詳細については、https://groups.google.com/forum/?fromgroups=#!msg/angular/AokZpUhZ6mw/x2kPIN2VAC0Jをご覧ください。

于 2013-03-12T20:19:01.050 に答える