我正在将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的情况下实现吗?

最佳答案

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

编辑:下面是一种替代方法:

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

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


模拟私有属性的另一种方法是:-使用Symbols / weakmaps或围绕整个类创建一个闭包,并将MyDependency存储在此闭包中。

09-25 17:37