我的州有一个routeProvider。
$routeProvider.
when("/register",{
templateUrl: "templates/register.html",
controller: "RegisterCtrl",
resolve: {
user: function(Auth) {
return Auth.resolveUser();
}
}
}).
when("/home",{
templateUrl: "templates/home.html",
controller: "HomeCtrl",
resolve: {
user: function(Auth) {
return Auth.resolveUser();
}
}
}). .... [.....]
当用户状态登录时,每个州都有一个解决的承诺。然后执行不同控制器的代码。现在我想要一个导航栏的mainController,它应该存在于所有站点上。控制器需要用户数据来检查新消息等。
现在:如何在根状态下全局定义解析(因此我可以访问所有站点的根控制器中的userdata),并且所有其他控制器仅执行其代码,如果来自此roote状态的promise解决了?
我希望我的问题可以理解......
答案 0 :(得分:0)
我认为你正在寻找像$routeChangeStart
这样的东西,这是一种在用户改变网络应用中的路线时执行你想要的东西的方法。从stackoverflow查看Route和this其他问题。希望能帮助到你。
答案 1 :(得分:0)
您可以通过在$routeProvider.when
语句之外定义路由来完成此操作:
var routes = [
{
url: "/register",
config: {
templateUrl: "templates/register.html",
controller: "RegisterCtrl"
}
},
{
url: "/home",
config: {
templateUrl: "templates/home.html",
controller: "HomeCtrl"
}
}
];
然后遍历您的路线以扩展resolve
属性,然后使用$routeProvider
注册它们:
angular.forEach(routes, function (route) {
var url = route.url;
var routeConfig = route.config;
routeConfig.resolve = angular.extend(routeConfig.resolve || {}, {
// add your global resolves here
user: function(Auth) {
return Auth.resolveUser();
}
});
$routeProvider.when(url, routeConfig);
});
如果之前已经解决了,那么Auth.resolveUser()
应该负责退还已履行的承诺。