如何从Angular2中的json获取数据

时间:2017-08-31 07:28:55

标签: json angular

我有这样的Json回复。

{
    "response": {

        "my_students": {
            "students": [
                {
                    "studentNumber": "123",
                    "studentName": "ABC"

                    "studentaddresse": [
                        {

                            "address": "test"

                        }
                    ]

                },
                 {
                    "studentNumber": "345",
                    "studentName": "CDS"

                    "studentaddresse": [
                        {

                            "address": "test1"

                        }
                    ]

                }
            ]
        }
    }
}

点击按钮,我必须获取这些数据。 为此,在 component.ts 文件中,我有这段代码

studdata=[];
 ngOnInit(){
       this.studdata= this.studentService.loadStudents();
}

student.service.ts 文件中,我有这段代码

  loadStudents(): any{
      return this.loginService.getStudentData();
   }

login.Service.ts 文件中,我有这段代码 //在按钮上单击我正在调用 getStudentResponseData()此方法  在控制台中获取数据。但在 getStudentData()方法中我没有获取数据

 student_data: Object;

     public getStudentResponseData() : Promise<any> {
          if(typeof(this.student_data) === "undefined") {
                return this.http.get('assets/studentapi.json')
                .toPromise().then(res => {

                                      this.student_data = res.json().response;
                       console.log("data"+this.student_data);                
                                      return  this.student_data;
                    }).catch(this.handleError);
          } else {
              return Promise.resolve(this.student_data);
          }
    }
    public getStudentData(): Object {
            return this.student_data;
        }

任何人都可以帮助我,我做错了吗? 我想在html中显示值,如何在这里显示学生编号。

<div *ngFor="let stu of studdata">
<div>{{stu.studentNumber}}</div>
</div>

2 个答案:

答案 0 :(得分:2)

loadStudents()返回一个Promise。因此,在您的组件中,代码必须类似于:

 ngOnInit(){
       this.studentService.loadStudents()
           .then((students) => {
               this.studdata = students;
           });
}

答案 1 :(得分:1)

因为此方法是异步的。您可以在 $addressFields .= sprintf(' <div style="position: relative"> <input type="text" title=%s name="billing[street][%s]" id="billing:street%s" value="%s" class="%s input-text validate-address-lenght maximum-length-%s" />', $title = $this->__('Street Address ' . ($_i + 1)), $name = $_i, $id = $_i + 1, $value = $dataHelper->clearDash($this->getQuote()->getBillingAddress()->getStreet($_i + 1)), $class = ($_i === 0) ? 'required-entry ' : '', $max = 'YOUR_MAX_VALUE_HERE' );

中获取数据

由于方法的异步,您无法从.Promise().then ( ... you can handle data here ...)函数获取数据。