2017-08-15 2 views
5

Hallo Ich habe eine Funktion, die nach einer http-Anfrage an den Server aktualisiert wird. Es scheint, dass die console.log zeigt, dass der Wert aktualisiert wurde, aber die Benutzeroberfläche wird nicht aktualisiert, wenn ich nicht auf eine andere Komponente (z. B. Eingabe) klicke.Ionic 3 nicht aktualisieren Ansicht

Dies ist meine Funktion:

fileTransfer.upload(this.created_image, upload_url, options) 
.then((data) => { 
    console.log("success:"+data.response); //This is showing correct response 
    var obj = JSON.parse(data.response); 
    this.sv_value = obj.value; 
    console.log(this.sv_value); //This is showing correct value 
}, (err) => { 
    console.log("failure:"); 
}) 

Dies ist meiner Ansicht nach html:

<ion-row> 
     <ion-col center width-100 no-padding> 
     <h2>{{sv_value}}</h2> //This is not updated 
     </ion-col> 
    </ion-row> 

Gibt es eine Möglichkeit, dieses Problem angehen können? Vielen Dank

+0

aber Sie loggen this.value nit sv_value –

+0

Haben Sie eine Lösung gefunden? – robbannn

+0

@mohamadrabee Sorry, es ist eine Frage Tippfehler. Bearbeitet –

Antwort

5

Versuchen Sie, this.sv_value = obj.value; innerhalb NgZone.run(); zu platzieren, um Angular die Änderung zu erkennen.

import { Component, NgZone } from "@angular/core"; 
... 

export class MyComponentPage { 
    constructor(
     private zone: NgZone 
     ... 
    ){ } 

    yourFunction(){ 
     fileTransfer.upload(this.created_image, upload_url, options) 
     .then((data) => { 
      console.log("success:"+data.response); //This is showing correct response 
      var obj = JSON.parse(data.response); 

      this.zone.run(() => { 
       this.sv_value = obj.value; 
      }); 

      console.log(this.value); //This is showing correct value 
     }, (err) => { 
      console.log("failure:"); 
     }); 
    } 
} 
+0

Danke, darf ich etwas fragen? Ist dies eine übliche Methode zur Aktualisierung des Werts in UI in Angular 2? Vielen Dank –

0

Leider funktioniert es auch perfekt, indem Sie diese Zeile hinzufügen.

Observable.interval().subscribe(); 

Sie müssen diese beiden Zeilen importieren.

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/interval';