在 ng-conf 2015 的视频中(Angular 1.3 遇见 Angular 2.0 https://youtu.be/pai1ZdFI2dg?t=4m41s),使用 ES6 类作为控制器的语法如下:
class UnicornHype {
constructor(unicornHorn, $q) {
this.$q = $q;
this.horn = unicornHorn
}
findUnicorn {
return this.$q((resolve, reject) => {
...
this.horn.thrust();
...
});
}
}
我看到注入的依赖项被分配为实例属性,我想知道这是否是一个好方法。由于控制器的依赖项通常是单例服务,因此它们不应该由实例共享吗?
他们这样做的原因是之前的方法$scope
(因此在构造函数的主体中)现在位于对象的共享原型上。约翰·帕帕的风格指南 https://github.com/johnpapa/angular-styleguide#style-y031实际上将它们直接分配给this
(虽然他没有使用 ES6 类 - 但这并不重要,因为它们只是构造函数上的语法糖prototype
东西)。这是一个好主意吗?
另一种方法是将方法保留在原型上,但将依赖项分配给局部变量(假设每个控制器位于其自己的模块文件中)。就像是:
var q, horn;
class UnicornHype {
constructor(unicornHorn, $q) {
[q, horn] = [$q, unicornHorn];
}
findUnicorn {
return q(...);
}
}
这是否更好?如果是的话,会const
实际上比var
这里?这种方法有什么缺点吗?
第三种方法(使用WeakMaps
) 描述如下:使用 ES6 编写 AngularJS 应用程序 http://www.sitepoint.com/writing-angularjs-apps-using-es6/。我应该忘记上面所说的一切并这样做吗?