我想使用extends
关键字从父服务扩展我的子服务。我在向子服务中注入另一项服务MyService
时遇到了一些麻烦。
export class ParentService {
constructor($http) {}
get() {
this.$http.get('/someUrl').then(res => res.data);
}
}
export class ChildService extends ParentService {
constructor($http, private MyService) {
super($http);
}
get() {
const data = super.get();
return this.MyService.cleanData(data);
}
}
由于某种原因MyService
在undefined
中以ChildService
的形式返回,我只能假设DI出现问题。但是,如果我删除了extends
关键字,则MyService
会按预期工作。
知道这里可能会发生什么。任何帮助表示赞赏。提前谢谢!
答案 0 :(得分:0)
尝试将get()
和ParentService
中的ChildService
方法重命名为其他任何方法。
get
是一个关键字/绑定语法,它将对象属性绑定到查找该属性时调用的函数。编译器期望get
之后的属性或函数名称可能会被绊倒。即使在Plunkr get
中,IDE也会突出显示保留字/语法。
get
可以像这样使用:
class Todo {
constructor(task) {
this.task = task;
}
get task() {
return this.task.toUpperCase();
}
}
get语法将对象属性绑定到将要执行的函数 查找该属性时调用。
尝试将get
更改为getData
或您需要的任何内容。
export class ParentService {
constructor($http) {}
getData() {
return this.$http.get('/someUrl');
}
}
export class ChildService extends ParentService {
constructor($http, private MyService) {
super($http);
}
getData() {
return super.getData()
.then(data => this.MyService.cleanData(data))
.catch(error => console.log(error));
}
}
以下是plunker演示了基本级别的功能,包括ParentService
,ChildService
和MyService
,其中MyService
被注入ChildService
和ChildService
延长ParentService
。此示例中正在console.log()
内执行constructor()
以显示DI正在正常发生。
希望这有帮助!