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