我有一个需要异步加载整个模块的状态。以下代码为我做了这个,并且效果很好(为了清楚起见,我删除了任何不需要的东西,包括自动注射的注释):
$stateProvider.state('root.lazy', {
url: '/lazy',
resolve: {
loadModule: function($ocLazyLoad) {
return getModuleAsync().then(function(module) {
return $ocLazyLoad.load({
name: module.name
});
});
}
});
现在,该模块还注册了一个服务 - 比如lazyService
,它可以异步获取数据。我想在加载模块后解析这些数据。所以我试过了:
$stateProvider.state('root.lazy', {
url: '/lazy',
resolve: {
loadModule: function($ocLazyLoad) {
return getModuleAsync().then(function(module) {
return $ocLazyLoad.load({
name: module.name
});
});
},
data: function(loadModule, lazyService) { // So ui-router knows it needs the previous resolve; but it fails trying to inject lazyService
return lazyService.getData();
}
});
但是ui-router给了我以下错误:Unknown provider: lazyServiceProvider <- lazyService
。
使用一些调试日志,我发现ui-router可能会在实际解析任何内容之前尝试注入resolve函数中所需的所有内容。实际上,错误会弹出之前我放入loadModule
函数的任何日志。但loadModule
最终解决了,然后一切都可用,但数据。
有没有办法在不使用解析模块的超级状态和解析数据的嵌套状态的情况下完成我想要的工作?鉴于当前的应用程序上下文,我们可以在同一状态下解决这两件事。
编辑:我正在使用带有AngularJS 1.5的ui-router 1.0.4