如何基于routeParam注入不同的服务

时间:2014-06-26 15:42:31

标签: angularjs

假设我必须使用类似的API但实现不同的服务

   myApp.module('myModuleApp').service('BananaService', function(){
       this.name = 'banana';
   });

   myApp.module('myModuleApp').service('AppleService', function(){
       this.name = 'apple';
   });

我想有办法注入Fruit,并根据某个routeParam值获取两个服务之一。

例如,让我们假设路由/:fruit/supply 我想要一个控制器

   myApp.module('myModuleApp').controller('FruitSupplyCtrl', function($scope, Fruit, $log){
      $log.info(Fruit.name); // should print banana or apple depends on route
   })

我需要使用的角度模式是什么。 我尝试使用工厂,提供商和服务,但没有成功。当网站加载时我们会调用它们,而每次路由更改都需要调用。

目前,我有一个服务Fruit,其方法为'get',只返回正确的服务。

   myApp.module('myModuleApp').service('FruitService', function(AppleService, BananaService, $routeParams){
      this.get = function(){
           return $routeParams.fruit === 'banana' ? BananaService : AppleService;
      }
   })

但这对我来说似乎不对。我相信还有更多angular way来做这件事。

1 个答案:

答案 0 :(得分:0)

您可以使用$ injector。

https://docs.angularjs.org/api/auto/service/ $注射器

myApp.module('myModuleApp').controller('FruitSupplyCtrl', function($scope, Fruit, $injector){
  var serviceName = Fruit.name + 'Service';
  $injector.get(serviceName);  // this will get the correct service
})