所有州的角度解决方案

时间:2014-11-18 10:01:24

标签: javascript angularjs

我的州有一个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解决了?

我希望我的问题可以理解......

2 个答案:

答案 0 :(得分:0)

我认为你正在寻找像$routeChangeStart这样的东西,这是一种在用户改变网络应用中的路线时执行你想要的东西的方法。从stackoverflow查看Routethis其他问题。希望能帮助到你。

答案 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()应该负责退还已履行的承诺。