在AngularJS的类方法中无法访问注入的依赖项

时间:2015-05-24 10:16:13

标签: javascript angularjs dependency-injection ecmascript-6

我使用ES6类用于Angular控制器,并且我在依赖注入时遇到了轻微的麻烦。以此控制器为例(显然不是真正的类)。

class PersonController {
  constructor(MyDependency) {
    MyDependency.test(); // this works
  }

  sendEvent() {
    MyDependency.test(); // MyDependency is undefined
  }
}

PersonController.$inject = ['MyDependency'];

export default PersonController;

运行构造函数时,可以很好地找到依赖项。但是,如果我调用sendEvent方法(或任何其他类方法),则不再定义依赖项。我之前通过在构造函数中将其附加到this来解决这个问题,例如this.MyDependency = MyDependency;

有没有其他方法可以在不挂除this的依赖关系的情况下实现这一目标?

2 个答案:

答案 0 :(得分:1)

这是因为你的方法无法访问myDependency。在构造函数中执行this.myDependency = myDependency,然后在您的方法中执行this.my dependency.test()。

编辑:以下是另一种方法: -

let _myDependency;    
class PersonController {
  constructor(MyDependency) {
    _myDependency = MyDependency;
    _myDependency.test(); // this works
 }

sendEvent() {
    _myDependency.test(); // this will work
  }
}

另一种模拟私有属性的方法是: - 使用符号/弱映射或在整个类周围创建一个闭包,并在此闭包中存储MyDependency。

答案 1 :(得分:0)

似乎没有其他办法可以做到这一点,所以我会坚持使用this