Angular:Child扩展了Parent Dependency Not Working

时间:2017-05-15 19:24:46

标签: angularjs service ecmascript-6 extends es6-class

我想使用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);
  }
}

由于某种原因MyServiceundefined中以ChildService的形式返回,我只能假设DI出现问题。但是,如果我删除了extends关键字,则MyService会按预期工作。

知道这里可能会发生什么。任何帮助表示赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:0)

尝试将get()ParentService中的ChildService方法重命名为其他任何方法。

get是一个关键字/绑定语法,它将对象属性绑定到查找该属性时调用的函数。编译器期望get之后的属性或函数名称可能会被绊倒。即使在Plunkr get中,IDE也会突出显示保留字/语法。

对于ES6类,

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演示了基本级别的功能,包括ParentServiceChildServiceMyService,其中MyService被注入ChildServiceChildService延长ParentService。此示例中正在console.log()内执行constructor()以显示DI正在正常发生。

希望这有帮助!