使用ES6类语法在控制器中分配依赖项
Assigning dependencies in controllers using the ES6 class syntax
在ng conf 2015的一段视频中(Angular 1.3符合Angular 2.0),使用ES6类作为控制器的语法如下所示:
class UnicornHype {
constructor(unicornHorn, $q) {
this.$q = $q;
this.horn = unicornHorn
}
findUnicorn {
return this.$q((resolve, reject) => {
...
this.horn.thrust();
...
});
}
}
我看到注入的依赖项被分配为实例属性,我想知道这是否是一个好方法。由于控制器的依赖项通常是单例服务,它们不应该由实例共享吗?
他们这样做的原因是,以前在$scope
上的方法(因此在构造函数的主体中)现在在对象的共享原型上。John Papa的风格指南实际上直接将它们分配给this
(尽管他没有使用ES6类,但这并不重要,因为它们只是构造函数prototype
的语法糖)。这是个好主意吗?
另一种方法是将方法保留在原型上,但将依赖项分配给局部变量(假设每个控制器都在自己的模块文件中)。类似于:
var q, horn;
class UnicornHype {
constructor(unicornHorn, $q) {
[q, horn] = [$q, unicornHorn];
}
findUnicorn {
return q(...);
}
}
这样更好吗?如果是的话,const
实际上会比var
更好吗?这种方法有缺点吗?
这里描述了第三种方法(使用WeakMaps
):使用ES6编写AngularJS应用程序。我应该忘记上面说的一切,这样做吗?
我真的不明白他们为什么使用Weakmap。我引用:
选择WeakMap的原因是,一旦对象被垃圾收集,WeakMap中以对象为键的条目就会被删除。
但是服务不是很长寿吗?那么,为什么需要确保垃圾收集呢?
在javascript中,所有非基元都是指向原始实例的指针,因此依赖关系总是共享的。那么,为什么实例变量方法不是一个好主意呢?
无论如何,我认为实例变量方法似乎是最经得起未来考验的方法。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- 如何在jQuery中将函数的输出分配给变量
- 为集合分配大量的模型弹药
- onclick函数需要双击,因为类分配延迟
- Javascript 将变量分配给警报
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 如何将本地依赖项添加到npm项目中
- 将节点数据分配给另一个变量jstree
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- jquery中的复选框依赖项
- 为什么react/redux前端项目在package.json中包含生产依赖项
- 使用ES6类语法在控制器中分配依赖项
- 是否可以在运行依赖项之前在 gulp 任务中分配变量
- EmberJS-当相同的值被分配给依赖属性时,更新计算的属性
- 如果分配给嵌套require中的变量,RequireJS R.js看不到依赖的require文件