我应该在注入的 Angular 服务上使用只读而不是公开它们吗?

2024-01-08

今天我进行了一次讨论,我的一些同事说他们像这样注入 Angular 服务:

constructor(readonly language: I18nService)

他们说他们这样做是因为它可以防止我的组件的使用者更改注入的服务,有点像这样:

@Component({ ... })
class ComponentA {
    constructor(public language: I18nService) {}
}

@Component({ ... })
class ComponentB {
    @ViewChild(ComponentA) compA: ComponentA;
    constructor() {
        this.compA.language = new I18nService();
    }
}

因此,虽然从技术上讲他们是正确的,但我仍然不相信我应该这样做。我问自己以下问题:

  1. DI 是 Angular 的基本组成部分。如果有人真的这么做了,这个人是应该更好地进入这个坑并失败,还是他/她根本做不到?

  2. readonly对于刚开始学习 Angular 和 TypeScript 的人来说,这种情况可能很难理解,原因有几个

    • Angular 在其任何官方 DI 文档中均未使用此方法
    • 你需要知道如何readonly有效,它只是保护我注入的服务的引用,但没有任何属性
  3. 在我看来,这是一个极端情况问题,尽管有一个简单的解决方案

你怎么认为?有没有我可能没见过的官方参考资料?当我尝试用谷歌搜索时,我没有找到任何东西readonly在 Angular 概念中

最后一句话:虽然这是 100% 真实的 - 可以操纵public service: Service- 我仍然不确定这个问题是否应该得到解决,并且正在纠结是否要这样做。


这不是你必须做的事情,但这样做是很好的做法readonly因为您可能不想再次重新分配实例。

只读属性可以具有初始值设定项,并且可以在同一类声明内的构造函数中进行赋值,但除此之外,不允许对只读属性进行赋值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该在注入的 Angular 服务上使用只读而不是公开它们吗? 的相关文章

随机推荐