如何使打字稿明确评估胖箭头功能?

时间:2019-01-18 12:54:10

标签: angular typescript lambda angular-reactive-forms angular-forms

我正在以成角度的形式使用FormBuilder。我想根据从API调用到后端的响应(此处称为FormControl)来初始化userFormDetails的值)。

我正在尝试使用粗箭头功能()=>来实现相同的功能:

//Other Form Controls
 empCode:[this.userFormDetails.userId],
 empName:[this.userFormDetails.name],
 pensionType:[''],
 fhName:[
          ()=>{
return this.userFormDetails.gender=="Male"? this.userFormDetails.fatherName:this.userFormDetails.spouseName
}],   
.
//Rest of the controls

但是此评估为

function () { return _this.userFormDetails.gender == "Male" ? _this.userFormDetails.fatherName : _this.userFormDetails.spouseName; }

它返回函数本身作为值,而不是对其求值。如何使函数返回评估值?

我也尝试这样做:

1。

()=>{ ( **<--addition parenthesis**
return this.userFormDetails.gender=="Male"? this.userFormDetails.fatherName:this.userFormDetails.spouseName
)}
  1. 将FormControl的值设置为:
fhName:[{
     value: ()=>{
                 return this.userFormDetails.gender=="Male"? 
                 this.userFormDetails.fatherName:this.userFormDetails.spouseName
                },
                disabled:false
             }
            ]

但是他们都不起作用。 有人可以指导我正确的方法吗?

2 个答案:

答案 0 :(得分:1)

您正在将窗体控件设置为功能。您已经声明了它,但没有调用它,因此请使用匿名函数作为闭包,如下所示。

尝试以这种方式更改

fhName:[(()=>{
return this.userFormDetails.gender=="Male"? this.userFormDetails.fatherName:this.userFormDetails.spouseName
})()] 

包装在()中的函数结尾处的附加()将声明并调用该函数。

详细了解anonymous function

答案 1 :(得分:0)

As suggested by @Jithin Scaria in the comments, the following method works :

(() => { / content / })() Wrapping the function in parenthesis and then calling it makes TS to compute the value and return it.