迭代angular2打字稿中的数组

时间:2017-01-06 10:09:50

标签: javascript arrays angular typescript

是打字稿和angular2的新手并且学习了这个,我有这个问题。我有一个表单,我想显示一个项目数组的结果,但这些项目每次都在不断更改,所以我现在不知道返回结果的实际索引。

就是这种情况

我有这个form.html

<span style="color:red">{{usererror.username}}  </span>
...other items here
<span style="color:red">{{usererror.password}}  </span>

现在在组件

export class LoginComponent implements OnInit{
 public usererror={
    username:"",
    password:""
  }

  //this function is called after a post request
onLoginError(error:any){

let message= JSON.parse( error._body);
  console.log(error._body); //first log
  console.log(message)  //second log


}

}

从上面的函数开始,第一个日志返回一个

形式的数组
[{"field":"username","message":"Username cannot be blank."},
  {"field":"password","message":"Password cannot be blank."}]

现在我想在上面的usererror中分配用户名和密码变量,以便显示它们

这样的事情

onLoginError(error:any){

let message= JSON.parse( error._body);
   let message= JSON.parse( error._body);

    for (var i=0; i<message.length; i++){
     this.usererror.message[i].field = message[i].message;  //this fails since the 
         //usererror doesnt have (message[i].field) property

     }
 }

有时返回的结果没有用户名字段,有时也没有密码字段。我如何解决这个问题,对于angular2和typescript来说还是新手

2 个答案:

答案 0 :(得分:2)

使用方括号表示法(object["property"]):

let messages= JSON.parse( error._body);
for (let message of messages){
    if(this.usererror[message.field])
      this.usererror[message.field]=message.message;
}

答案 1 :(得分:1)

如果您只需检查this.usererror.message[i].field是否存在,那么在尝试复制邮件之前,您可以添加if语句,如下所示:

for (var i=0; i<message.length; i++){
    if(this.usererror.message[i].field){
        this.usererror.message[i].field = message[i].message;
    }
}

如果该字段为undefined,因为该字段不存在,那么if语句将返回false