Hon*_*iao 103 typescript angular
如果我不加私人之前foo,loadBar和text,我相信他们是公共默认情况下.
export class RandomComponent {
@Input() foo: string;
@Output() loadBar = new EventEmitter();
text: string;
}
Run Code Online (Sandbox Code Playgroud)
当它们public在组件中时是否有任何用例?
出于封装/安全原因,我是否应该private像以下一样为所有这些添加?
export class RandomComponent {
@Input() private foo: string;
@Output() private loadBar = new EventEmitter();
private text: string;
}
Run Code Online (Sandbox Code Playgroud)
谢谢
dre*_*ore 182
回答这个问题有很多话要说,这些是我脑子里想到的第一个想法:
首先,请记住,这private只是一个编译时构造 - 它不能在运行时强制执行(请参阅此处和此处进行相关讨论).因此,请private为了安全目的而废除任何有用的概念.这根本不是它的意思.
它是关于封装的,当您在组件上有一个要封装在其中的字段或方法时,明确表示不应该从其他任何地方访问它,那么您应该绝对做到private:这private就是:它标志着你的意图,无论你穿什么都不应该从课外接触.
同样的情况public:它也是一个仅编译时的构造,因此public默认情况下类成员的事实是真的,在运行时具有完全零意义.但是当你有一个明确打算作为你的类API的一部分暴露给外部世界的成员时,你绝对应该让它public表明这个意图:这public就是为了什么.
这一般都适用于Typescript.特别是在Angular中,确实有公共成员使用组件类的有效用例:例如,在实现容器/组件(又称智能/哑)模式时,"哑"子项通过构造函数注入注入"智能"父项,非常重要的是要传达你对父母应该和不应该被孩子们触摸的意图的意图:否则,当你抓住那些在父母酒柜里鬼混的愚蠢孩子时,不要感到惊讶.
那么,我对你问题的回答:
我应该像以下一样为所有人添加私人吗?
是一个强调没有.你不应该总是添加,private因为这样做会破坏关键字的目的,因为如果你把它放在任何地方它就不再发出任何意图:你可能不会把它放在任何地方.
Luc*_*cas 17
@drewmoore提供了一个很好的答案,私人/公共归结为意图.但是在使用注入的私有值时还有一些事情需要考虑:
@Import() private fooconstructor(private foo) {}foo如果我们想要将TypeScript作为AoT编译过程的输出发出,我们必须确保只访问组件模板中的公共字段**
| 归档时间: |
|
| 查看次数: |
64740 次 |
| 最近记录: |