AngularJS app.run()のドキュメント?


337

どこでどのようにapp.run()使用されますか?モジュール定義の後、後、app.config()または後app.controller()

関数で特定のコードを実行できるかどうかを尋ねるBreezeJS Angular Qを採用していapp.run()ます。


2
そして、角度モジュール.constants()が設定された後
alfonsob

回答:


650

呼び出し順序は次のとおりです。

  1. app.config()
  2. app.run()
  3. ディレクティブのコンパイル関数(domにある場合)
  4. app.controller()
  5. ディレクティブのリンク関数(見つかった場合)

以下は、それぞれの実行を観察できる簡単なデモです(必要に応じて実験もできます)。

以下からの角度のモジュールのドキュメント

ブロックの実行 -インジェクターの作成後に実行され、アプリケーションのキックスタートに使用されます。runブロックに注入できるのはインスタンスと定数のみです。これは、アプリケーションの実行中にシステムがさらに設定されるのを防ぐためです。

Runブロックは、Angularでmainメソッドに最も近いものです。実行ブロックは、アプリケーションをキックスタートするために実行する必要があるコードです。すべてのサービスが構成され、インジェクターが作成された後に実行されます。実行ブロックには通常、単体テストが難しいコードが含まれているため、単体テストでは無視できるように、独立したモジュールで宣言する必要があります。

実行ブロックが使用される1つの状況は、認証中です。


4
@KayakDaveこれがトピック外であるかどうかはわかりませんが、上記の実行順序に関して、サービスはいつ開始され、いつ実行されますか?
ジョニー2014

3
@jonnieMを支援するのはおそらく少し遅れますが、サービスは最初に必要とされるタイミングに応じて実行されます。つまり、実行ブロックで最初にサービスが必要な場合は、そのブロックの直前に実行されます。プロバイダーについては、厄介なことに、コード内での順序に応じて、configブロックの前または後に実行されます。プロバイダーを直接使用するのは構成段階のみであることを考えると、これは正しくないようです。
Zac Seth

2
こんにちは、私はフォークとも工場出荷時の負荷を表示するために、あなたのバイオリンサンプルを変更した: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz

1
驚くばかり。徹底的に言うと、すべての前にapp.constant()関数が呼び出されます...そして、app.factory()と他のサービス関数は「遅延して」呼び出されます。言い換えると、Angularは提供された関数を使用して、コントローラーまたは別のサービスが注入を必要とする場合にのみ、サービスインスタンスを作成します。これは、アプリが初期化されてから長い時間が経過した場合でも同様です。
Niko Bellic

Ionicプロジェクトでは、デフォルトでrunは設定の前に呼び出されます。何故ですか ?
Rayjax

28

具体的には...

どこでどのようにapp.run()使用されますか?モジュール定義の後app.config()、またはその後 、app.controller()

どこ:

あなたのpackage.jsで /packages/dashboard/public/controllers/dashboard.js

どうやって:

このように見せます

var app = angular.module('mean.dashboard', ['ui.bootstrap']);

app.controller('DashboardController', ['$scope', 'Global', 'Dashboard',
    function($scope, Global, Dashboard) {
        $scope.global = Global;
        $scope.package = {
            name: 'dashboard'
        };
        // ...
    }
]);

app.run(function(editableOptions) {
    editableOptions.theme = 'bs3'; // bootstrap3 theme. Can be also 'bs2', 'default'
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.