2014-09-03 108 views
0

我有許多在AngularJs應用程序中定義的服務。有一個必須加載的根服務,從服務器獲取一些數據,然後依賴此根服務的其他服務可以初始化,之後控制器可以加載和顯示頁面上的數據。如何在AngularJs中加載控制器之前等待服務初始化?

釷的問題是控制器的根服務之前加載,和兒童服務,完全可以初始化,如:

  • 用戶加載頁面
    • 根服務啓動初始化
    • 控制器的負荷,這取決於關於子服務(取決於根服務)
    • 頁面綁定失敗,因爲子服務無法向控制器提供數據
    • r OOT服務完成intialisation(太遲)

初始化流程我想是這樣的:

  • 用戶加載頁面
    • 根業務啓動初始化
    • 根服務完成intialisation
    • 依賴根服務初始化的子服務
    • 控制器的負荷,這取決於兒童服務
    • 頁面綁定成功

是否有處理這種問題的技術?

+0

但是,一旦服務完成,您的控制器型號應該沒問題,您可以將值重新分配給控制器範圍,是嗎? – Ahmad 2014-09-03 11:28:01

+1

也許這會幫助你http:// stackoverflow。com/questions/16286605/initialize-angularjs-service-with-asynchronous-data加載一些異步數據,你必須使用promise或回調函數 – falloff 2014-09-03 12:03:03

回答

0

從角文檔https://docs.angularjs.org/guide/module

模塊是配置的集合和運行其中獲得在引導過程中施加到該應用程序塊。在其最簡單的形式中,模塊由兩種塊的集合組成:

配置塊 - 在提供程序註冊和配置階段執行。只有提供者和常量可以注入到配置塊中。這是爲了防止服務在完全配置之前發生意外實例化。

運行阻止 - 在創建注入器後執行並用於啓動應用程序。只有實例和常量可以注入運行塊。這是爲了防止在應用程序運行時進一步進行系統配置。

angular.module('myModule', []). 
    config(function(injectables) { // provider-injector 
    // This is an example of config block. 
    // You can have as many of these as you want. 
    // You can only inject Providers (not instances) 
    // into config blocks. 
    }). 
    run(function(injectables) { // instance-injector 
    // This is an example of a run block. 
    // You can have as many of these as you want. 
    // You can only inject instances (not Providers) 
    // into run blocks 
    }); 

試試這個。

相關問題