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/');
}
}
編輯:
如果你是
這通常是將它們放入實例來完成使用TypeScript,可以通過在構造函數參數上使用訪問修飾符來保存一些樣板文件。例如:
class HomeController {
constructor(private $http) {}
}
...這是簡寫:
class HomeController {
private $http;
contructor($http) {
this.$http = $http;
}
}
編輯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