在angular2中使用方法名称之前使用get的目的是什么?

时间:2017-08-18 16:03:16

标签: javascript angular

我是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() - 一直返回更新的结果然后为什么使用另一个?

2 个答案:

答案 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;。没有重要的订阅/取消订阅...