Angularjs 使用角度工厂进行管线解析
使用UI路由器,但我不确定这是否重要 我试图做的是将当前解析逻辑提取到工厂/服务中,这样它就不会污染我的Angularjs 使用角度工厂进行管线解析,angularjs,angular-ui-router,Angularjs,Angular Ui Router,使用UI路由器,但我不确定这是否重要 我试图做的是将当前解析逻辑提取到工厂/服务中,这样它就不会污染我的$stateProvider定义。这是一个简短的例子: 这是我当前的配置:($kinvey是一个返回承诺的服务) 我想要的是: resolve: { 'user': 'DataResolverService.userResolve' } 数据解析服务 .factory('DataResolverService', function DataResolverService($k
$stateProvider
定义。这是一个简短的例子:
这是我当前的配置:($kinvey
是一个返回承诺的服务)
我想要的是:
resolve: {
'user': 'DataResolverService.userResolve'
}
数据解析服务
.factory('DataResolverService', function DataResolverService($kinvey) {
var userResolve = {
user: ['$kinvey', function ($kinvey) {
return $kinvey.User.me();
}]
};
// public API
return {
userResolve: userResolve
};
});
我似乎得到了一个
未知的提供程序:DataResolverService.userResolveProvider,这是因为您正在配置块中使用一个服务。您应该能够像这样注入它:
resolve: {
'user': ['DataResolverService', function(DataResolverService){
return DataResolverService.userResolve;
}]
}
另一种方法是将注入混乱隐藏在常量中(不要忘记将$injector
作为依赖项包括在内):
这里有一个讨论:作为“最佳实践”说明,有没有更好的方法?看起来有点难看——但另一种选择更糟糕。只是添加了一个替代方案,它将“难看”隐藏在一个常量中
resolve: {
'user': ['DataResolverService', function(DataResolverService){
return DataResolverService.userResolve;
}]
}
resolve: $injector.get('ResolveMap')
app.constant('ResolveMap',{
'user': ['DataResolverService', function(DataResolverService){
return DataResolverService.userResolve;
}]
});