与ES6类我跑进了以下问题结合采用了棱角分明1.6:(!惊喜)AngularJS:继承的依赖关系需要重复吗?
我写了一个服务,一些依赖
class myService {
/*@ngInject*/
constructor($q){
this.$q = $q;
this.creationDate = new Date();
}
doStuff(data){
return this.$q.when(data);
}
}
angular.module('app').service('myService', myService)
但是我有一个积累的目标,其中,是有点票友服务所需,所以我延伸它,在这种情况下使用的扩展服务,而不是:
class myFancyService extends myService{
/*@ngInject*/
constructor($q, $http){
super($q);
this.$http = $http;
}
doFancyStuff(data){
console.log(this.creationDate);
return this.doStuff(data)
.then((stuff) => this.$http.post('api.myapp', stuff));
}
}
angular.module('app').service('myService', myFancyService)
这工作得很好,到目前为止,但有一个主要的缺点:
通过调用super(dependencies)
,我的基类的依赖关系不能从@ngInject
自动注入。因此,我需要非常清楚,只要我改变myService
的依赖关系,myFancyService
(以及任何其他潜在的未来子类)的依赖关系也需要改变。
我不能使用组合而不是继承,因为myService
未注册为角度服务,因此无法注入为依赖关系。
问:
是否有办法来自动反正注入基类的依赖呢?
如果没有,是否至少有一种方法让我的unittests提醒我,我需要更新myFancyService
的依赖关系?如果super($q)
的参数(或者可能只是参数的个数)等于myService- constructor
的(数量)参数,我还找不到一种方法来使用karma/jasmine进行测试。
因为['properties initializers'](https:// esdiscuss。),所以我使用了'static getter'。org/topic/es7-property-initializers)不是标准的(如果你使用babel或打字稿,你也可以使用它们)。 – Hitmands
这太好了,非常感谢!我正在更多地阅读'ng-annotate'和'$ inject'-property,看看我能不能自动注入服务而不是输入字符串数组(并保持它与参数列表同步) )。但除此之外,这正是我一直在寻找的! –
如果它完成了这项工作,那么请在调查后接受它。 – Hitmands