Angularjs 使用角度工厂进行管线解析

Angularjs 使用角度工厂进行管线解析,angularjs,angular-ui-router,Angularjs,Angular Ui Router,使用UI路由器,但我不确定这是否重要 我试图做的是将当前解析逻辑提取到工厂/服务中,这样它就不会污染我的$stateProvider定义。这是一个简短的例子: 这是我当前的配置:($kinvey是一个返回承诺的服务) 我想要的是: resolve: { 'user': 'DataResolverService.userResolve' } 数据解析服务 .factory('DataResolverService', function DataResolverService($k

使用UI路由器,但我不确定这是否重要

我试图做的是将当前解析逻辑提取到工厂/服务中,这样它就不会污染我的
$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;
     }]
});