使用TypeScript在AngularJS服务中进行依赖项注入的最佳实践

Vin*_*ent 7 angularjs typescript angularjs-service

我发现在TypeScript中对AngularJS服务的依赖注入有些麻烦.目前,我在服务类中定义了一个工厂方法,并且必须重复三次依赖注入参数:

class MyService {
    public static Factory($rootScope, myController) {       // 1st time
        return new MyService($rootScope, myController);     // 2nd time
    }
    constructor(public $rootScope, public myController) {}  // 3rd time
}
myModule.factory('myService', MyService.Factory);
Run Code Online (Sandbox Code Playgroud)

我想做以下,但这似乎不起作用:

class MyService {
    constructor(public $rootScope, public myController) {}  // only once
}
myModule.factory('myService', MyService);
Run Code Online (Sandbox Code Playgroud)

这种方法适用于控制器,但对于服务则不然.有没有更好的办法?

提前致谢!

bas*_*rat 6

你应该用户service没有factory:

class MyService {
    constructor(public $rootScope) {}  // only once
}
myModule.service('myService', MyService);
Run Code Online (Sandbox Code Playgroud)


Sau*_*ory 1

您可以简单地使用 Angular 的注入器来创建控制器,而不用使用工厂方法。

这是打字稿的示例

/// <reference path='d.ts/DefinitelyTyped/angularjs/angular.d.ts' />

class MyCtrl {
  public phrase: string;
  constructor($window) {
    this.phrase = 'I was loaded by injector';
  }

  speak() {
    alert(this.phrase);
  }
}

function main() {
  var injector = angular.injector(['ng']);
  var ctrl = injector.instantiate(MyCtrl);
  ctrl.speak();
}
Run Code Online (Sandbox Code Playgroud)

和一个小提琴手来证明它的工作原理:http ://jsfiddle.net/UPv5j/3/