我今天讨论了,我的一些同事说他们像这样注入(inject)他们的 Angular 服务:
constructor(readonly language: I18nService)
他们说他们这样做是因为它阻止了我的组件的使用者更改注入(inject)的服务,有点像这样:
@Component({ ... })
class ComponentA {
constructor(public language: I18nService) {}
}
@Component({ ... })
class ComponentB {
@ViewChild(ComponentA) compA: ComponentA;
constructor() {
this.compA.language = new I18nService();
}
}
所以,虽然从技术上讲他们是对的,但我仍然不相信我应该那样做。我问自己以下问题:
readonly
在这种情况下,对于开始学习 Angular 和 TypeScript 的人来说,理解起来可能非常复杂,原因有几个readonly
工作,它只是保护我注入(inject)的服务的引用,但没有任何属性 你怎么认为?有没有我可能没见过的官方引用资料?当我尝试在 google 上搜索
readonly
的用法时,我什么也没找到。在 Angular 概念中最后一句话:虽然 100% 正确 - 可以操纵
public service: Service
的引用- 我仍然不确定是否应该解决这个问题,并为是否要解决而苦恼。
最佳答案
这不是您必须做的事情,但制作它们是一种很好的做法 readonly
因为您可能不想再次重新分配实例。
Read-only properties may have initializers and may be assigned to in constructors within the same class declaration, but otherwise, assignments to read-only properties are disallowed.
关于angular - 我应该在注入(inject)的 Angular 服务上使用 readonly 而不是将它们公开吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54871856/