我建议您探索 ngRoute 的 'resolve' 属性(如果您使用的是 ngRoute)或 UI-router 状态:-
使用$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-controller”即可。而是在定义您的路线|状态时提供控制器,如上面的示例所示。
正在“解析”的属性 - 如果它们是 Promise,控制器(因此是视图)在 Promise 被解析之前不会被初始化。
我强烈建议您探索UI Router 允许您共享“已解决”的状态层次结构方法;子状态的属性。