2016-06-23 12 views
2

私はanglesjs(1.5)アプリケーションを構築するためにtypescriptを使用しようとしています。モデルクラスへのAngularJS(1.5)依存性注入

モデルを呼び出すファクトリ(パラメータを取ることができる)と同等のものを作りたいと思います。私は純粋なJSでそれをやるとしたら

は、私は次の操作を行うことができ

angular.module('test', []) 
    .factory('Talker', [$q, function($q){ 
     return Talker() 

     function Talker(name) { 
     this.name = name || 'Bobuel Johnson'; 
     } 
     Talker.prototype.deferredHello = function(){ 
     $q.when('Hi, I\'m ' + this.name); 
     } 
    }]) 

今、私はトーカクラスを持つことができるようにtypescriptですでこれをやりたいが、私は(注入できるようにしたいですこの場合)$ qをモデルクラスに追加します。

私は、これをtypescriptに相当するものとして設定する方法を理解できますか?

答えて

2

angle2の準備をする場合はサービスレシピの代わりに工場を使用することをお勧めします。そのjsコードのTypeScript書き換えは、次のようになります。

class Talker { 
    public static $inject = ['$q']; // configure angular di 
    private name: string = 'Some talker'; 

    constructor(private $q) {} 

    public deferredHello() { 
    this.$q.when('Hi, I\'m ' + this.name); 
    } 
} 

angular.module('test').service('Talker', Talker); 

あなたはhereをJSための翻訳を見つけることができます。

工場が絶対的に必要とされている場合は、このようにもそれを行うことができるはずです。

class Talker { 

    private name: string = 'Some talker'; 

    constructor(private $q) {} 

    public deferredHello() { 
    this.$q.when('Hi, I\'m ' + this.name); 
    } 
} 

angular.module('test').service('Talker', function($q) { 
    return new Talker($q); 
}); 

あなたが生成されたJavaScript hereをチェックアウトすることができます。

話者の複数のインスタンスを作成する必要がある場合は、この方法で行うことができます。そのため

class Talker { 

    private name: string = 'Some talker'; 

    constructor(private $q, money: number) {} 

    public deferredHello() { 
    this.$q.when('Hi, I\'m ' + this.name); 
    } 
} 

angular.module('test').service('Talker', function($q) { 
    // we can ask for more parameters if needed 
    return function talkerFactory(money) { // return a factory instead of a new talker 

    return new Talker($q, money); 
    }; 

}); 

angular.module('yatest').service('Organiser', function(Talker) { 
    let talker = Talker(42); // will call talkerFactory and return a new instance of talker 
}) 

hereあります。

+0

アドバイスありがとうございます!私は、サービスがシングルトンであり、モデルのいくつかのインスタンスを必要とするので、モデルをサービスとしてどのように提供できるのかは本当にわかりません。また、インスタンス化中にパラメータをフィードしたい場合、トーカモデルに問題があります。あなたが言及した工場版を使うことをお勧めしますか、それとも良い方法がありますか? – ThinkBonobo

+0

サービスから何かのインスタンスを複数作成するパターンがあります。使用すると、呼び出されたときにクラスの新しいインスタンスが返される関数を返します。そのための例も追加します。 https://github.com/angular/angular.js/issues/2708 – toskv

関連する問題