Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Angular UI Router解析所有状态的数据?_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript 如何使用Angular UI Router解析所有状态的数据?

Javascript 如何使用Angular UI Router解析所有状态的数据?,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,在我的应用程序中,每个路由都要求在呈现之前从我的API检索帐户数据。为此,我使用ngRoute执行以下操作: $rootScope.$on('$routeChangeStart', function(event, next, current) { next.$$route.resolve = next.$$route.resolve || {}; next.$$route.resolve.authorizationCheck = function() { ret

在我的应用程序中,每个路由都要求在呈现之前从我的API检索帐户数据。为此,我使用ngRoute执行以下操作:

$rootScope.$on('$routeChangeStart', function(event, next, current) {
    next.$$route.resolve = next.$$route.resolve || {};

    next.$$route.resolve.authorizationCheck = function() {
        return deferredAccountData.promise;
    };
});
因此,在每个路由之前,必须解析
authorizationCheck
resolve,它返回一个承诺。这很好用

我现在切换到使用UI路由器,我需要保留此功能。实现这一点有哪些选择


我可以想到的一个选项是使用嵌套状态,并让所有路由从父状态继承解析。不过如果可能的话,我还是不想窝了。还有其他选择吗?

这最终取决于您如何组织路由,因为您可以继承路由并为每个子级和父级提供resolve子句,但您还有stateChangestart StateChangeSuccessuccess事件,允许您执行类似的操作。如需进一步帮助,请提供路由示例

您可以解析父状态中多个ui路由器状态所需的数据。子州也会有这些数据

$stateProvider
.state('app', {
  url: "/",
  resolve: {
    authorizationCheck: function() {
       // Do your API checks or whatever
    }
  }
})
.state('app.somepage', {
  url: "/somepage",
  templateUrl: "partials/some.page.html",
  controller: function($scope) {

  }
})

不过,在服务中进行授权检查会更有意义,因此您可能希望在主控制器中插入身份验证服务,并在此基础上创建状态和可用性。

是的,我现在使用的是
$stateChangestart
。但问题是,我实际上需要延迟视图的渲染,直到数据请求解决为止,我唯一能想到的方法是对每个路由使用解析。你能发布路由示例吗?酷,我可能必须使用子状态。至于授权检查,我想这是一个糟糕的例子。我真正想做的是检索用户的帐户信息。假设他们登录,创建cookie,关闭浏览器,然后回来。他们仍然在技术上登录,但我们必须再次检索他们的帐户数据。这种检索是我想要使用解析的,我需要确保在解析数据之前不会呈现任何请求的视图。你还会说功能应该存在于服务中吗?啊,是的,根据经验,我把所有类似API的调用都放在服务中。路由器应该只做路由。我以前使用的是这样的:.state('home',{url:'/',controller:function($state,$cookieStore){if($cookieStore.get('token')){$state.go('app.substate of app');}或者{$state.go('pub.home');//或者登录屏幕}啊,是的!通过提供好的JavaScript接口来与API对话的服务……是的,我正在使用这些:)Hydra示例中的一个建议是将基本应用程序状态(或其名称)抽象为
,这样显然就不需要直接输入。