假设我必须使用类似的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
来做这件事。
答案 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
})