gpt4 book ai didi

angularjs - $stateProvider 状态下的 Resolve 函数被执行两次

转载 作者:行者123 更新时间:2023-12-05 07:24:11 28 4
gpt4 key购买 nike

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

我也尝试过使用更新的 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,其中显示已解析的函数被执行了两次:http://next.plnkr.co/edit/evuQuRxYwCNwhAPw?open=lib%2Fscript.js&preview

最佳答案

这里的问题(引用 your plnkr )是默认路由是 route1,因此应用程序在加载时直接转到该路由。同时,您在运行 block 中有一个异步 API 调用,以检查用户是否有权使用 route1。一旦该 API 调用的 promise 得到解决,应用程序将第二次重定向到 route1,为您提供双重解决方案。

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

  • 默认状态就像一个开关,根据用户的授权状态重定向到 route1 或其他路由(未经授权的用户看到的任何内容)。重定向逻辑可以在切换 Controller 中。
  • 为“$stateChangeStart”实现一个处理程序,检查用户的授权并在他们未被授权时重定向他们(当然一定要在某处保留他们的授权状态,这样您就不会每次都调用异步 API! )

关于angularjs - $stateProvider 状态下的 Resolve 函数被执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55586582/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com