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あります。
アドバイスありがとうございます!私は、サービスがシングルトンであり、モデルのいくつかのインスタンスを必要とするので、モデルをサービスとしてどのように提供できるのかは本当にわかりません。また、インスタンス化中にパラメータをフィードしたい場合、トーカモデルに問題があります。あなたが言及した工場版を使うことをお勧めしますか、それとも良い方法がありますか? – ThinkBonobo
サービスから何かのインスタンスを複数作成するパターンがあります。使用すると、呼び出されたときにクラスの新しいインスタンスが返される関数を返します。そのための例も追加します。 https://github.com/angular/angular.js/issues/2708 – toskv