【问题标题】:How get() works in Typescriptget() 如何在 Typescript 中工作
【发布时间】:2017-07-24 16:53:17
【问题描述】:

假设我们有 Angular Reactive 表单:

<form [formGroup]="form">
 <input formControlName="username">
 <div *ngIf="form.get('username').invalid">Invalid</div>
</form>

和组件:

export class FormClass {
 form = new FormGroup({
  username: new FormControl('', Validators.required); 
 )}
}

为了使这条线更短 - &lt;div *ngIf="form.get('username').invalid"&gt;Invalid&lt;/div&gt;

我们给组件添加一个get方法:

get username() {
 return this.form.get('username')
}

所以现在我们可以做 - &lt;div *ngIf="username.invalid"&gt;Invalid&lt;/div&gt;

我想知道为什么我们不调用这个方法?我们只是将它作为一种对象传递——没有()。我的意思是这个方法是一个函数,函数像username() 一样被调用。在这种情况下,get() 有什么特别之处吗?抱歉我的 TS 知识不好...

【问题讨论】:

  • 因为这就是 getter/setter 在 JS 中的工作方式,请阅读 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 这是一个很好的问题,如果您不习惯其他语言(如 Java),我认为它可能会令人困惑。有命名的 getter 和 setter。我不擅长解释,但是您可以在 SO 上找到很多问题在这里得到很好的回答,只需寻找 getter 和 setter。
  • 谢谢大家,我会读一下。还有@Maximus - 我以前访问过那个页面,只是阅读/理解文档对我来说还是有点困难..

标签: angular typescript get


【解决方案1】:

因为通过添加get 使其成为getter 并且可以像字段一样访问(读取)。这是一个 TypeScript 功能。

使用set,您可以创建匹配的设置器,并且您可以像字段一样读取和设置它。

【讨论】:

  • 我希望您的头像至少是 20 年前制作的。感谢您的回答,现在对我来说更清楚了
  • getter alkways 返回一个新的对象实例?
  • @MeganClerc 它是关于 getter 的,它是关于 getter 的实现。如果你有一个像 get foo() { return { bar: 'baz'}; } 这样的 getter,那么每次调用它时都会创建一个新的 { bar: 'baz'},这将推动 Angular 更改检测的疯狂。
猜你喜欢
  • 2015-11-25
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 2019-05-26
  • 2021-04-18
相关资源
最近更新 更多