使用UI-Router,但我不确定它是否重要。
我要做的是将我当前的解析逻辑提取到工厂/服务中,这样它就不会污染我的$stateProvider
定义。这是一个简短的例子:
这是我当前的配置:($kinvey
是一个返回承诺的服务)
.state('home', {
url: '/',
views: {
'header': headerView,
'content': {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
},
'footer': footerView
},
resolve: {
user: ['$kinvey', function ($kinvey) {
return $kinvey.User.me();
}]
}
})
我想要的是:
resolve: {
'user': 'DataResolverService.userResolve'
}
DataResolverService
.factory('DataResolverService', function DataResolverService($kinvey) {
var userResolve = {
user: ['$kinvey', function ($kinvey) {
return $kinvey.User.me();
}]
};
// public API
return {
userResolve: userResolve
};
});
我似乎得到了Unknown provider: DataResolverService.userResolveProvider <- DataResolverService.userResolve
。这是因为工厂/服务不能在config()
区块内这样运行吗?
答案 0 :(得分:3)
这是因为您在配置块中使用了服务。你应该能够像这样注入它:
resolve: {
'user': ['DataResolverService', function(DataResolverService){
return DataResolverService.userResolve;
}]
}
另一种方法是将注射混乱隐藏在常数中(不要忘记包含$injector
作为依赖):
resolve: $injector.get('ResolveMap')
app.constant('ResolveMap',{
'user': ['DataResolverService', function(DataResolverService){
return DataResolverService.userResolve;
}]
});
这里有一个讨论:https://groups.google.com/forum/#!topic/angular/QtO8QoxSjYw