我使用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
的依赖关系的情况下实现这一目标?
答案 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
!