gpt4 book ai didi

javascript - Angular ui-router 中的 Promise 依赖解析顺序

转载 作者:行者123 更新时间:2023-12-02 00:46:56 25 4
gpt4 key购买 nike

我已经设置了一个顶级 Controller ,仅当成功解决 promise (由 Config 工厂返回)时才会实例化该 Controller 。该 promise 基本上会下载 Web 应用程序配置,以及 RESTful 端点等。

$stateProvider
.state('app', {
url: '/',
templateUrl: 'views/_index.html',
controller: 'MainCtrl',
resolve: {
config: 'Config'
}
});

此设置允许我在任何较低的 Controller 有机会使用它之前断言配置已正确加载。

现在我需要在更深的嵌套 Controller 中注入(inject)另一个使用 Configfactory ,并且仅在解析时才起作用(将其视为 $resource 包装器需要一些 Web 服务 URL)。如果我这样做:

$stateProvider
.state('app.bottom.page', {
url: '/bottom/page',
templateUrl: 'views/_a_view.html',
controller: 'BottomLevelCtrl',
resolve: {
TheResource: 'MyConfigDependingResource'
}
});

看起来resolve评估顺序并不遵循从上到下的 Controller 层次结构,而是从下到上,因此:

  1. app.bottom.page 已输入
  2. ui-router 尝试解析 MyConfigDependingResource,但注入(inject)失败,因为 Config 从未初始化过
  3. ui-router 解析因错误而停止(甚至没有抛出 Error,但这是另一个问题),并且 Config 是从未被顶层 Controller 初始化

为什么ui-router以相反的顺序解析依赖关系?在顶级 MainCtrl 解析了 Config 之后,如何轻松解析我的 TheResource 对象(不依赖 $inject,当然)?

更新:来自 this plnkr's log您可以看到,只有在嵌套 Controller 开始其自己的解析过程后,才会尝试顶级resolve

最佳答案

与 @Kasper Lewau 的答案类似,可以指定对单个状态的解析的依赖。如果您的解析之一依赖于同一解析 block 中的一个或多个解析属性。在我的例子中 checkS 依赖于另外两个解析

.state('stateofstate', {
url: "/anrapasd",
templateUrl: "views/anrapasd.html",
controller: 'SteofsteCtrl',
resolve: {
currU: function(gamMag) {
return gamMag.checkWifi("jabadabadu")
},
userC: function(gamUser, $stateParams) {
return gamUser.getBipi("oink")
},
checkS: ['currU', 'userC', 'gamMag', function(currU, userC, gamMag) {
return gamMag.check(currU, userC);
}]
}
})
<小时/>

**PS:**检查 following document 的“解决”部分有关 resolve 内部工作原理的更多详细信息。

关于javascript - Angular ui-router 中的 Promise 依赖解析顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21983452/

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