ES2015クラス(またはトランスビルドされたクラス)は、プロトタイプの継承よりも構文上の砂糖です。これは、定義したメソッドが "クラス"のプロトタイプに置かれることを意味します。コンストラクタに挿入された依存関係にアクセスできるようにするには、後でプロトタイプメソッドで参照できるように、何らかの形で保存する必要があります。
これは通常のインスタンスにそれらを置くことによって行われます。
function HomeController($http) {
this.$http = $http;
}
HomeController.prototype.doMe = function() {
this.$http.get('http://www.yahoo.com/');
};
クラスベースの構文では、これはに変換:あなたがいる場合
:
class HomeController {
constructor($http) {
this.$http = $http;
}
doMe() {
this.$http.get('http://www.yahoo.com/');
}
}
EDIT TypeScriptを使用すると、コンストラクターの引数にアクセス修飾子を使用することで、いくつかの定型文を保存できます。例:
class HomeController {
constructor(private $http) {}
}
...の省略形です:あなたはあなたのコントローラが縮小フレンドリーにしたい場合は、のいずれかを使用することができます
:
class HomeController {
private $http;
contructor($http) {
this.$http = $http;
}
}
EDIT 2オプションはhereと記載されています(のようなツールもあります)。たとえば、あなたが "$inject
プロパティ注釈" メソッドを使用することができますどのようにこの:
ES5
HomeController.$inject = ['$http'];
function HomeController($http) {...}
HomeController.prototype.doMe = function() {...}
ES2015
class HomeController {
constructor($http) {...}
...
}
HomeController.$inject = ['$http'];
// OR
class HomeController {
static get $inject() { return ['$http']; }
constructor($http) {...}
doMe() {...}
}
活字体
class HomeController {
static $inject = ['$http'];
constructor(private $http) {}
doMe() {...}
}
'静的$の注入= [ '$ HTTP']'缶追加することもできます。 – estus
あなたのコメントはありませんでした@estus:これはどこに正確に追加できますか? – alexk
@alexkコントローラクラス内。適切に縮小されるためには、クラスに注釈を付ける必要があります。 – estus