Javascript 所有状态的角分辨率为1

Javascript 所有状态的角分辨率为1,javascript,angularjs,Javascript,Angularjs,我为我的州准备了一个线路提供商 $routeProvider. when("/register",{ templateUrl: "templates/register.html", controller: "RegisterCtrl", resolve: { user: function(Auth) { return Auth.resolveUser(); }

我为我的州准备了一个线路提供商

$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();
          }
        }
      }). .... [.....]
当用户状态为loggedIn时,每个状态都有一个解析的承诺。然后执行不同控制器的代码。现在我想有一个主控制器的导航栏,这应该是在所有网站上。控制器需要userdata来检查新消息等

现在:如果此根状态的承诺已得到解决,如何在根状态下全局定义解析,以便我可以访问所有站点的根控制器中的用户数据,并且所有其他控制器仅执行其代码


我希望我的问题是可以理解的…

我想你正在寻找类似$routeChangeStart的东西,这是一种每当用户在你的web应用程序中更改路线时执行你想要的东西的方法。请看stackoverflow的内容和其他问题。希望能有帮助

您可以通过在$routeProvider.when语句之外定义路由来完成此操作:

var routes = [
  {
    url: "/register",
    config: {
      templateUrl: "templates/register.html",
      controller: "RegisterCtrl"
    }
  },
  {
    url: "/home",
    config: {
      templateUrl: "templates/home.html",
      controller: "HomeCtrl"
    }
  }
];
然后在向$routeProvider注册之前,遍历路由以扩展resolve属性:


您的Auth.resolve用户应负责返回已履行的承诺(如果之前已解决)。

我不确定我是否了解所有内容,但如果您希望每个控制器中都有可访问的内容,则应提供服务,或者,如果不太好,请输入$rootscope谢谢您的评论。是的,我知道服务。状态的解析是访问服务。处理用户登录状态的身份验证服务。但是,如何在一个州内只解决这一承诺一次并不确切。不同状态的控制器加上所有页面上用于导航的主控制器需要等待。对于您的解决方案,他们在从数据库接收用户对象之前执行代码。因此,在执行代码之前,他们需要在每个状态检查用户是否登录时等待解决。这在单独状态的控制器上运行良好。但是我的导航栏的控制器没有,因为控制器应该在所有页面上。我遇到了这样一个问题。我的页面在检查用户是否真正登录之前加载。这是你的问题吗?嗯。。。我不知道这样做是否正确,但我将一个作用域变量写入日志,并默认设置为false,并将ng show='logged'放入主布局的html中。在检查用户是否已登录的控制器上,如果用户确实已登录,则我将logged的值更改为true,以便在logged变量为true之前页面不会显示。谢谢您的回答。但这只是前端的一件事。我的解决方法如下:ng controller=RootCtrl到页面主体->调用RootController Auth.resolveUser。然后做一些事情…很乐意帮助。感谢分享您的解决方案。我也要在我的梦中实现。
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);
});