2013-12-18 33 views

回答

611

這裏的調用順序:

  1. app.config()
  2. app.run()
  3. 指令的編譯功能(如果它們在DOM中找到)
  4. app.controller()
  5. 指令的鏈接功能(再次,如果找到)

這裏是一個simple demo,您可以在其中觀看每一個正在執行(並且如果您願意,可以進行實驗)。

Angular's module docs

運行塊 - 獲取創建注入後執行,並 使用的kickstart的 應用。只有實例和常量可以注入運行塊。這是爲了防止在應用程序運行期間進一步進行系統組態。

對於主要方法,運行塊是Angular中最接近的東西。運行 塊是需要運行以啓動應用程序的代碼。 在所有服務配置完成並且 注入器已創建後執行。運行塊通常包含難以進行單元測試的代碼,因此應該在隔離的 模塊中聲明,以便它們可以在單元測試中被忽略。

使用運行塊的一種情況是在authentications期間。

+3

@KayakDave我不知道這是題外話,但在關係按照上面提到的運行順序,服務何時啓動以及何時運行? – jonnie

+3

它可能來得有點晚,以幫助您@jonnieM,但服務將根據正在第一需要的時候,他們在執行 - 即,如果你首先需要在運行塊中的服務,這將是塊之前立即執行。至於提供者,令人煩惱的是,他們將在配置塊之前或之後運行 - 取決於它們來自代碼的順序。考慮到直接使用提供者的唯一時間是在配置階段,這看起來不正確。 –

+2

嗨,我已經分叉和修改你的小提琴樣品還顯示工廠負荷:https://jsfiddle.net/lorezz/4cxgpLqj/1 – user1490729

26

具體...

如何以及在哪裏使用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' 
});