2017-07-20 6 views
1

Ich bin neu in Ionic und ich benutze Ionic 3.5 mit AngularIO, für mein Fall ist das Problem nach Ajax Anruf Ich bekomme die Daten vom Dienst, aber die Ansicht wird nicht aktualisiert Emulator. Obwohl die Ansicht in der Webversion korrekt gerendert wird. Hier ist meine Komponente und htmlView aktualisiert nicht in Ionic 3.5

export class HomePage { 

    private tagService: TagService; 
    public tagData: any; 

    constructor(public navCtrl: NavController) { 
    this.tagService = new TagService(); 
    this.loadTags(); 
    } 

    private loadTags() { 
    this.tagService.getTagData().then((data)=>{ 
     this.tagData = data;alert(JSON.stringify(data)); 
    },()=>{ 
     alert("Error occured"); 
    }); 
    } 

} 

<ion-item *ngFor="let tag of tagData" (click)="tagClicked($event)" class="activity" color="positive" data-item="tag"> 
     {{tag.name}} 
     <ion-icon name="{{tag.icon}}" item-right></ion-icon> 
    </ion-item> 

Die Service-Methode ist hier

public getTagData() :Promise<Tag[]> { 
     let promise: Promise<Tag[]>; 
     promise = new Promise((resolve, reject)=>{ 
      $.ajax({ 
       url: "data/tag.data.json", 
       success: (data) => { 
        this.tags = data; 
        resolve(this.tags); 
       }, 
       error:() => { 
        reject(); 
       } 
      }); 
     }); 
     return promise; 
    } 
+0

zeigen die 'this.tagService.getTagData()' Verfahren –

+0

mit der Servicefunktion aktualisiert. BTW, wenn ich eine Warnung mit den erhaltenen Daten setze, zeigt es richtig –

Antwort

2

Ich glaube, Sie observable statt promise aus der loadTags Funktion zurückkehren. In diesem Fall melden Sie sich ein Ereignis statt mit then

private loadTags() { 
    this.tagService.getTagData().subscribe((data) => { 
     this.tagData = data; 
     alert(JSON.stringify(data)); 
    }, (error) => { 
     alert("Error occured"); 
    }) 
} 

nicht jquery ajax Syntaxen verwendet werden. verwenden Winkel 2 eingebauten Komponenten

public getTagData(): any { 

    return this.http.get("data/tag.data.jso") 
} 
+0

Ich erhalte Daten vom Service sogar im Emulator, das ist nicht das Problem. Nur die Ansicht wird nicht im Emulator gerendert. –

+0

Danke, mit eckigen Komponenten gearbeitet. Aber kannst du mir bitte sagen, warum es nicht passiert, wenn ich Jquery benutze? Wie ich schon sagte, bekam ich Daten, aber die Ansicht wurde nicht aktualisiert. –

+0

weil jquery ajax die wechselseitige Bindung in eckigen Klammern stoppt. Obwohl das Ergebnis zu Ihrem js kommt, wird es nicht an die Ansicht gebunden. Verwenden Sie daher immer angular in build-Komponenten –

Verwandte Themen