gpt4 book ai didi

angular - 我应该在注入(inject)的 Angular 服务上使用 readonly 而不是将它们公开吗?

转载 作者:行者123 更新时间:2023-12-04 14:21:05 25 4
gpt4 key购买 nike

我今天讨论了,我的一些同事说他们像这样注入(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();
}
}

所以,虽然从技术上讲他们是对的,但我仍然不相信我应该那样做。我问自己以下问题:
  • DI 是 Angular 的基础部分。如果真的有人这样做了,这个人是最好跑到这个坑里失败还是完全做不到
  • readonly在这种情况下,对于开始学习 Angular 和 TypeScript 的人来说,理解起来可能非常复杂,原因有几个
  • Angular 在他们的任何官方 DI 文档中都没有使用这种方法
  • 您需要知道如何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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com