2015-06-08 65 views
0

已經創建了角,還在學習和發現......初始化應用程序等待REST調用數據導致

我需要創建一個角度應用程序,它依賴於應用程序中使用的各種參數的一些基本的Web應用程序。例如,我們將通過REST檢索各種標籤字符串...這些標籤用於應用程序的每個屏幕上,包括啓動時顯示的第一個屏幕...

我正在尋找一個「適當的'/'好'/'有角'的方式來初始化應用程序,等待一種'init-application'rest-call的結果 - 由於這個rest調用的結果包含應用程序從啓動上,我發現下面的實例方法...

https://blog.mariusschulz.com/2014/10/22/asynchronously-bootstrapping-angularjs-applications-with-server-side-data

是否有更多的想法/想法/有用的鏈接... 謝謝!

+0

如果您的應用程序中有一個ui路由器,那麼使用它的「解析」功能是一種方法:http://stackoverflow.com/a/18019915/533711 – ischenkodv

回答

2

我建議你去探索ngRoute的'resolve'屬性(如果你使用的是ngRoute)或UI路由器狀態: - 當使用$routeProvider

: -

$routeProvider 
    .when("/news", { 
     templateUrl: "newsView.html", 
     controller: "newsController", 
     resolve: { 
      message: function(messageService){ 
       return messageService.getMessage(); 
     } 
    } 
}) 

或者,如果你是使用UI Router: -

$stateProvider.state('root',{ 
     abstract:true, // this is abstract statte, controller is in child states. 
     templateUrl:'/assets/root-module/partial/main/main.html', 
     resolve : { 
      securityContext : function($http){ 
       return $http.get("/security/context"); 
      }, 
      token : function(securityService,securityContext){ 
       securityService.setToken(securityContext.data.token); 
       console.debug(securityContext.data.token); 
       return securityContext.data.token; 
      } 
     } 
    }); 

在任一方案的,只是確保你不要在你的HTML模板提供「NG控制器」。相反,如上例所示,在定義路線時提供控制器。

屬性被「解決」 - 如果它們是承諾,那麼控制器(因此視圖)將不會被初始化,直到承諾解決。

我強烈建議你去探索UI Router狀態層次結構的方法,它可以讓你分享'已解決;證明孩子的狀態。