2013-11-21 12 views
7

TypeScriptのAngularJSサービスの依存関係注入は、やや面倒です。現在、私は私のサービスクラス内のファクトリメソッドを定義し、すべての依存性注入の引数を3回繰り返す必要があります。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); 

私は次の操作を行いたいが、それは動作していないよう:

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

このアプローチはコントローラでは問題ありませんが、サービスではうまく機能しません。より良い方法がありますか?

ありがとうございます!

答えて

1

ファクトリメソッドを持つ代わりに、単に角度のインジェクタを使用してコントローラを作成することもできます。ここで

はtypescriptですのサンプル

/// <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(); 
} 

そして、それが動作するか検証するシオマネキです:http://jsfiddle.net/UPv5j/3/

6

あなたがすべきユーザーserviceないfactory

class MyService { 
    constructor(public $rootScope) {} // only once 
} 
myModule.service('myService', MyService); 
+1

はまた、その「myModule.serviceに注意してください( 'myService'、MyService); ' *クラス宣言後*に行ってください。前に配置すると、コードはコンパイルされますが、実行時にエラーが発生します(未定義のプロトタイプにアクセスするなど)。 –

関連する問題