我正在将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存储在此闭包中。