我建议你去探索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状态层次结构的方法,它可以让你分享'已解决;证明孩子的状态。
如果您的应用程序中有一个ui路由器,那么使用它的“解析”功能是一种方法:http://stackoverflow.com/a/18019915/533711 – ischenkodv