Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conditional injection of a service in AngularJS

I have defined a service like this :

angular.module('myApp').service('myService', [
'$rootScope',
...
...

I want my service to be instantiated only for new user (i.e. when user.createdAt > today).

So is there a way to conditionally inject my service or at least destroy my service without any side effect if the user is an old one.

like image 635
Cratein Avatar asked Dec 31 '14 13:12

Cratein


1 Answers

You can use the $injector service to get inject-ibles dynamically if you need to:

app.controller('DemoCtrl', function($injector) {
  this.clicky = function() {
    myFact = $injector.get('myFactory');
    myFact();
  };
});

app.factory('myFactory', function() {
  return function() {
    alert('foobar!');
  };
});

Here's a full running demo: http://jsbin.com/bemakemaja/1/edit

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

As a general guideline though I'd recommend not designing your services such that simply injecting them has side effects.

like image 125
jtrussell Avatar answered Sep 19 '22 02:09

jtrussell