我是angular2的新手,当我查看某人的代码时,一条特定的行让我感到困惑
get formData() { return <FormArray>this.lienHolder.get('policyDetails'); }
为什么上述行与此
有任何不同formData() { return <FormArray>this.lienHolder.get('policyDetails'); }
我在谷歌搜索过这个并没有找到实际结果,任何人都可以帮我理解这一点。
更新
这个
有什么区别var obj = { log: 0, get latest() { return this.log++; } };
和这个
var obj = { log: 0, latest() { return this.log++; } };
我打电话给他时都给了我更新的价值 obj.latest&amp; obj.latest() - 一直返回更新的结果然后为什么使用另一个?
答案 0 :(得分:1)
使用get
可以将其视为var:
let something = formData;
否则你必须调用函数:
let something = formData();
在检索数据时,通常会使用get
格式化数据。例如:
let _number = '12';
get number(){
return parseInt(_number);
}
答案 1 :(得分:1)
get formData()
被称为 getter 访问者。它允许您动态获取属性。它总是应该返回一个值。
<小时/> https://www.typescriptlang.org/docs/handbook/classes.html
TypeScript支持getter / setter作为拦截访问的方式 到一个对象的成员。这为您提供了一种更细粒度的方法 控制如何在每个对象上访问成员。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get
有时需要允许访问返回a的属性 动态计算的值,或者您可能希望反映其状态 内部变量,无需使用显式方法 调用。在JavaScript中,这可以通过使用a来完成 吸气。
与此相反,getFormDate()
是函数,它可以接受参数而不总是返回值。
其中一个我想使用getter的情况是应该从服务获取属性:
<p>{{dictionary.label1}}</p>
然后我从这样的服务中得到它:
get dictionary(){
return this.myService.getDictionary();
}
这种方式当服务改变数据时我动态地可以接收到我的绑定/模型的值。
如果我定义如下:
dictionary: [];
ngOnInit(){
this.dictionary = this.myService.getDictionary();
}
然后我会被困在&#39;使用旧数据,而服务已经收到新的数据集。当然,您可以设置更改侦听器并触发更新,但它还有更多代码!
将getter视为动态类属性。
更新:
对于更新后的帖子中的示例,它们是真的,它们会给出相同的结果,这是一件好事!您可以同时使用这两种方法,但由于它们的工作方式不同,因此在某些情况下您可以选择更多选项。它不仅仅是一个或只是另一个,或者哪个是最好的。在大多数情况下,您可以同时使用它们,以及您需要使用它们的位置。大多数情况下,它是一种使用的方法,因为它有更全面的用途:我们使用带或不带参数的方法来触发对象的操作。但在某些情况下,它不会具有与吸气剂相同的灵活性。如果你对使用哪一个犹豫不决,首先使用方法,当你看到它的极限时,想想吸气剂是否能帮助你,就像现在你知道它的目的是什么 - 这是一个属性,但是动态!
<小时/> 另一个例子:
isShown:boolean; //is 'static', will return the same value unless you change it in some kind of a method
get isShown(){
return this.someCondition && this.someMethodResult() || this.anotherCondition
}
如果someCondition和anotherCondition发生更改并且someMethodResult的结果必须更改,则您不必请求isShown值,它会动态完成。
相反,你可以
setShown(){ //the method
this.isShow = !this.isShown;
}
这里需要调用setShown,因此可以更新isShown。
此外,getter可以轻松替换只返回类属性值的方法。
<小时/> 的 UPDATE2:强>
另一个好人&#39; get
的示例。组件需要检查用户是否已登录以显示/隐藏某些按钮的情况。您可以执行以下操作,而不是订阅更改:
HTML:
<button [hidden]="!isLogged">Log out</button>
打字稿:
get isLoggedIn(){
return this.authService.isLoggedIn();
}
那就是它!如果用户退出,则该按钮将立即被禁用&#39;。没有重要的订阅/取消订阅...