使用Angular工厂进行路径解析

时间:2014-04-30 15:24:11

标签: angularjs angular-ui-router

使用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()区块内这样运行吗?

1 个答案:

答案 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

相关问题