【问题标题】:Angular Routing - Wait for previous resolve角度路由 - 等待先前的解决
【发布时间】:2015-02-24 13:14:06
【问题描述】:

我有如下的角度路线:

    $routeProvider.when('/admin/:one/:two/:three?', {
        templateUrl: '/app/partials/admin.html',
        controller: 'AdminCtrl',
        resolve: {
            login: function(LoginService) {
                return LoginService.login();
            },
            admin: function($route, LoginService) {
                return LoginService.admin($route.current.params.one, $route.current.params.two, $route.current.params.three);
            }
        }
    });

问题在于第二个解析,admin,取决于第一个解析的完成(LoginService.admin() 调用 ensureAuthenticated,这需要 LoginService.login() 才能完成,否则它会失败)。

有没有办法告诉管理员解析等待登录解析?

感谢您提供的任何帮助/建议。

【问题讨论】:

  • 如果没有找到更好的解决方案,您可以使用 $timeout,等待登录解决。否则,我认为这篇文章可能会有所帮助blog.brunoscopelliti.com/…
  • 谢谢,我最初用那个帖子来设置它,但他的“书”和“电影”是独立的,所以没有处理我的问题

标签: angularjs angular-routing resolve route-provider


【解决方案1】:

如果您将第一个解析结果(在您的情况下为login)注入第二个解析,则该解析将延迟到加载该值为止。如果没有加载或者有错误不会触发:

$stateProvider.state('/admin/:one/:two/:three?', {
        templateUrl: '/app/partials/admin.html',
        controller: 'AdminCtrl',
        resolve: {
            login: function(LoginService) {
                return LoginService.login();
            },
            admin: function($route, LoginService, login) { //here we injected login
                return LoginService.admin($route.current.params.one, $route.current.params.two, $route.current.params.three);
            }
        }
    });

编辑:更改了答案,目前我只知道这与 $stateProvider 一起使用。

【讨论】:

  • 这会返回一个错误:错误:[$injector:unpr] Unknown provider: loginProvider
  • @Gary 有可能它仅在 $stateProvider 中受支持。由于我找不到它的文档,我认为$routeProvider 也可能支持它。你必须使用第二个吗?
  • 第一个调用登录接口,让用户登录。第二个调用认证接口,确保登录的用户是管理员。第二个是重要的,它阻止非管理员访问 URL
  • 我的意思是如果你必须使用 $routeProvider 或者你可以切换到 $stateProvider ?
  • 说实话,我从来没有看过 stateProvider 所以我不确定。我现在看看是否有任何重大差异
猜你喜欢
  • 1970-01-01
  • 2015-05-17
  • 2021-11-18
  • 1970-01-01
  • 2019-02-18
  • 2019-01-16
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
相关资源
最近更新 更多