繁体   English   中英

Angular组件中的“私有”和“公共”

[英]“private” and “public” in Angular component

如果我不在fooloadBartext之前添加private ,我相信它们默认是公共的。

export class RandomComponent {
  @Input() foo: string;
  @Output() loadBar = new EventEmitter();
  text: string;
}

当它们在组件中public时是否有任何用例?

出于封装/安全原因,我是否应该像以下一样为所有人添加private

export class RandomComponent {
  @Input() private foo: string;
  @Output() private loadBar = new EventEmitter();
  private text: string;
}

谢谢

回答这个问题有很多话要说,这些是我脑子里想到的第一个想法:

首先,请记住, private只是一个编译时构造 - 它不能在运行时强制执行(请参阅此处此处进行相关讨论)。 因此,为了安全起见,请以任何方式消除任何private用途的概念。 这根本不是它的意思。

关于封装的,当你在组件上有一个字段或方法要封装在其中时,要明确它不应该从其他任何地方访问,那么你绝对应该把它变成private :这就是private的for: 它标志着你的意图 ,无论你穿什么都不应该从课外接触。

对于public来说也是如此:它也是一个仅编译时的构造,因此默认情况下类成员是public的,而true是在运行时具有完全零意义的事实。 但是当你有一个明确打算作为你的类API的一部分暴露给外部世界的成员时,你绝对应该public表明这个意图:这就是public的意思。

这一般都适用于Typescript。 特别是在Angular中,确实有公共成员使用组件类的有效用例:例如,在实现容器/组件 (又称智能/哑 )模式时,“哑”子项通过构造函数注入注入“智能”父项,非常重要的是要传达你对父母应该和不应该被孩子们触摸的意图的意图:否则,当你抓住那些在父母酒柜里鬼混的愚蠢孩子时,不要感到惊讶。

那么,我对你问题的回答:

我应该像以下一样为所有人添加私人吗?

是一个强调没有 你不应该总是添加private因为这样做会破坏关键字的目的,因为如果你把它放在任何地方它就不再发出任何意图:你可能不会把它放在任何地方。

@drewmoore提供了一个很好的答案,私人/公共归结为意图。 但是在使用注入的私有值时还有一些事情需要考虑:

如果我们想要将TypeScript作为AoT编译过程的输出发出,我们必须确保只访问组件模板中的公共字段**

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM