2017-08-31 1 views
2

Ich habe eine JSON-Antwort wie folgt.So erhalten Sie Daten von JSON in Angular2

{ 
    "response": { 

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

        "studentaddresse": [ 
         { 

          "address": "test" 

         } 
        ] 

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

        "studentaddresse": [ 
         { 

          "address": "test1" 

         } 
        ] 

       } 
      ] 
     } 
    } 
} 

Auf Knopfdruck muss ich diese Daten holen. dass für In component.ts Datei ich diesen Code

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

Und in student.service.ts Datei Ich habe diesen Code

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

Und in login.Service.ts haben Datei Ich habe diesen Code // Auf Schaltfläche klicken ich rufe getStudentResponseData() diese Methode In der Konsole bin d ata.but in getStudentData() Methode bin keine Daten bekommen

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; 
     } 

Kann jemand bitte helfen Sie mir mit diesem, wo ich falsch mache? Und ich möchte Werte in HTML anzeigen, wie Studentennummer hier angezeigt wird.

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

Warum rufen Sie nicht direkt den Login-Service? Der Studentenservice scheint mir unnötig. –

+0

Wenn ich direkt anrufe, bekomme ich auch keine Daten. @ D.Simon – ananya

Antwort

1

Da diese Methode asynchron ist. Sie können die Daten in .Promise().then (... you can handle data here ...)

erhalten Sie können keine Daten von getStudentData() Funktion wegen dieser async Methode erhalten.

+0

Sie können die Verwendung von Promise und das Auflösen von asynchronen Methoden im Link https://stackoverflow.com/questions/14220321/how-do-i sehen -return-the-response-from-async-call/14220323 # 14220323 – RTE

2

loadStudents() gibt ein Versprechen zurück. Also in Ihrer Komponente muss der Code wie sein:

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

Ich versuchte es so auch. Aber die Sache ist, dass Daten nicht zu dieser Methode kommen. @ D.Simon public getStudentData(): Objekt { Rückgabe this.student_data; } – ananya