[英]“private” and “public” in Angular component
如果我不在foo
, loadBar
和text
之前添加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提供了一个很好的答案,私人/公共归结为意图。 但是在使用注入的私有值时还有一些事情需要考虑:
@Import() private foo
或constructor(private foo) {}
,则typescript( noUnusedLocals )和tslint( no-unused-variable )都会报告错误,并且只在模板中使用foo
如果我们想要将TypeScript作为AoT编译过程的输出发出,我们必须确保只访问组件模板中的公共字段**
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.