Sunday, 15 May 2011

angularjs - how to inject different service based on routeParam -



angularjs - how to inject different service based on routeParam -

lets have services similar api different implementation

myapp.module('mymoduleapp').service('bananaservice', function(){ this.name = 'banana'; }); myapp.module('mymoduleapp').service('appleservice', function(){ this.name = 'apple'; });

i have way inject fruit, , 1 of 2 services according routeparam value.

for example, lets assume route /:fruit/supply have controller

myapp.module('mymoduleapp').controller('fruitsupplyctrl', function($scope, fruit, $log){ $log.info(fruit.name); // should print banana or apple depends on route })

what pattern in angular need use. tried using factory, provider , service, did not succeed. invoked 1 time when site loads while need invocation per route change.

currently, have service fruit method 'get' returns right service.

myapp.module('mymoduleapp').service('fruitservice', function(appleservice, bananaservice, $routeparams){ this.get = function(){ homecoming $routeparams.fruit === 'banana' ? bananaservice : appleservice; } })

but not seem right me. sure there more angular way this.

you can utilize $injector.

https://docs.angularjs.org/api/auto/service/$injector

myapp.module('mymoduleapp').controller('fruitsupplyctrl', function($scope, fruit, $injector){ var servicename = fruit.name + 'service'; $injector.get(servicename); // right service })

angularjs

No comments:

Post a Comment