在$ stateProvider状态下执行两次解析功能

时间:2019-04-09 06:41:56

标签: angularjs

我在我的应用程序中使用的是1.4.5版的angularJs和0.2.18版的angular-ui-router。我注意到我的resolve函数针对某个状态执行了两次。

我也尝试使用更新的angular-ui-router版本,最高为0.4.3,但问题仍未解决。

我的状态定义之一如下:

$stateProvider
        .state('app', {
            url: '/',
            views: {
                '': {
                    resolve: {                            
                        usersList: function() {
                            return MainService.getUsers().UsersData.$promise.then(
                                function(response) {
                                    return response;
                                }
                            );
                        }
                    },
                    templateUrl: 'app/views/main/main.html',
                    controller: "MainController"
                }
            }
        })

解析函数不应执行两次。它应该只执行一次。

我还注意到,我们首先检查用户是否有权访问页面,然后将其重定向到该页面。我创建了一个示例plunkr,其中显示了已解析的函数被两次执行:official docs

1 个答案:

答案 0 :(得分:0)

这里的问题(指的是your plnkr)是默认路由是route1,因此应用在加载时会直接使用该路由。同时,您在运行块中有一个异步API调用,以检查用户是否获得了route1的授权。解决了该API调用的承诺后,应用程序将第二次重定向到route1,为您带来双重解决。

将route1用作默认路由的方法没有意义,如果该路由需要可能缺少的授权。我建议:

  • 具有默认状态就像是根据用户的授权状态重定向到route1或其他任何路由(未经授权的用户看到的任何路由)的交换机。重定向逻辑可以在交换控制器中。
  • 为“ $ stateChangeStart”实现一个处理程序,该处理程序检查用户的授权并在未经授权的情况下重定向用户(请确保将其身份验证状态保留在某个地方,因此您不必每次都调用该异步API! )