typescript - Angular 组件中的 "private"和 "public"

标签 typescript angular

如果我不在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 只是一个编译时构造 - 它不能在运行时强制执行(有关相关讨论,请参见 herehere):请忽略任何private 的概念以任何方式用于安全目的。这根本不是它的意义所在。

关于封装的,当你的组件上有一个你想封装在其中的字段或方法时,明确表示不应该从其他任何地方访问它,那么你绝对应该将其设置为 private:这就是 private 的用途:它表明您的意图,即您放置的任何东西都不应被触及来自课外。

public 也是如此:它也是一个仅在编译时构造的结构,因此类成员默认为 public 的事实虽然为真,但确实具有运行时的零意义。但是,当您有一个成员,您明确打算将其作为类 API 的一部分公开给外界时,您绝对应该将其设置为 public 以表示此意图:这就是 public 是为了。

这一般都适用于 Typescript。具体来说,在 Angular 中,在组件类上拥有公共(public)成员绝对是有效的用例:例如,在实现 container/component 时(又名 smart/dumb )模式,“愚蠢”的 child 通过构造函数注入(inject)注入(inject)“聪明”的 parent ,传达您关于 parent 的哪些成员应该和不应该被 child 接触的意图非常重要:否则,不要当你看到那些在他们 parent 的酒柜里鬼混的蠢 child 时,你会感到惊讶。

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

should I always add private for all of them like below?

是强调的。您不应该总是添加private,因为这样做会破坏关键字的目的,因为如果您将它放在任何地方,它就不再表示任何意图:你还不如不要把它放在任何地方。

关于typescript - Angular 组件中的 "private"和 "public",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506343/

相关文章:

javascript - 我如何在发布请求javascript中包含ssl证书

javascript - 未捕获类型错误 : Cannot set property value of null

html - Angular5 mat-menu修改填充和宽度属性?

Angular 2 : get image from file upload

javascript - Angular 2 配置 "ng2-ckeditor.js"

javascript - 无效管道参数 : 'Unable to convert "2018-01-01-12:12:12:12345 6"into a date' for pipe 'DatePipe'

javascript - 获取两个日期之间的持续时间(Moment JS)

node.js - 如何在Node.js和TypeScript项目中使用URLSearchParams

javascript - 在页面构造函数中调用函数会导致空数组

Angular 9 国际化 - 请求的语言环境错误