2013-11-21 38 views
7

ile bir AngularJS hizmetinde bağımlılık enjeksiyonu için en iyi uygulama TipScript'te AngularJS hizmetleri için bağımlılık enjeksiyonu biraz hantal olmaktır. Şu anda, benim hizmet sınıfının içinde bir fabrika yöntemini tanımlar ve tüm bağımlılık enjeksiyon argümanları tekrarlamak zorunda üç kez:TypeScript

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); 

ben aşağıdakileri yapmak istiyorsunuz, ama bu işe görünmüyor:

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

Bu yaklaşım, denetleyiciler için iyi çalışır, ancak hizmetler için geçerli değildir. Daha iyi bir yolu var mı?

Şimdiden teşekkürler!

cevap

6

Kullanıcı service değil factory gerekir: Burada

çalıştığını 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(); 
} 

bir örnek Ve kanıtlamak için bir kemancı olan

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

unutmayın 'myModule.service ('myService', MyService); ' * sınıf bildiriminden sonra * gitmeli. Önceden yerleştirmek, kod derlemesini yapar ancak çalışma zamanında hatalara neden olur (undefined üzerinde prototip erişimi gibi bir şey). –