在AngularJS中有条件地注入服务

Cra*_*ein 5 angularjs typescript

我已经定义了这样的服务:

angular.module('myApp').service('myService', [
'$rootScope',
...
...
Run Code Online (Sandbox Code Playgroud)

我希望我的服务只为新用户实例化(即今天user.createdAt>).

那么有没有办法有条件地注入我的服务或至少破坏我的服务,如果用户是旧的,没有任何副作用.

jtr*_*ell 8

$injector如果需要,您可以使用该服务动态获取注入:

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

app.factory('myFactory', function() {
  return function() {
    alert('foobar!');
  };
});
Run Code Online (Sandbox Code Playgroud)

这是一个完整的运行演示:http://jsbin.com/bemakemaja/1/edit

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

作为一般指导原则,我建议不要设计您的服务,只需注入它们就会产生副作用.