2016-04-17 10 views
1

In meiner Ionic 2-Anwendung erhalte ich Daten von der SqlStorage und von einer HTTP.get-Anfrage. Wenn ich die Daten von der HTTP-Anfrage bekomme, wird meine Seite erwartungsgemäß mit den neuen Daten aktualisiert, aber wenn ich die Daten von der SqlStorage abrufe, wird sie nicht aktualisiert und die neuen Daten werden nur angezeigt, wenn ich 'pull to refresh'.Das Abrufen von Daten aus dem Speicher aktualisiert den Seiteninhalt nicht

PS: Ich verwende TypeScript.

Dies ist die SqlStorage erhalten:

oldFeeds() { 
    return new Promise((resolve, reject) => { 
    this.storage.get('feeds').then(data => { 
     resolve(JSON.parse(data)); 
    }); 
    }); 
} 

und das ist der HTTP-get:

feeds() { 
    return new Promise((resolve, reject) => { 
    this.http.get('http://foo.bar').map(res => res.json()).subscribe(data => { 
     resolve(data); 
    }, 
    e => reject(e)); 
    }); 
} 

Diese Methoden sind in einem Service und die Anrufe an sie sind genau die gleichen:

this.feedsService.oldFeeds().then(data => { 
    this.feeds = data; 
    this.entries = this.feeds[this.activeIndex].entries; 
}); 

this.feedsService.feeds().then(data => { 
    this.feeds = data; 
    this.entries = this.feeds[this.activeIndex].entries; 
}); 

Irgendwelche Ideen, warum das passiert und was könnte ich tun, um es zu lösen? Danke!

Antwort

1

Update

Um winkelförmigen Stangen Änderungserkennung "von Hand" Schubs können Sie ApplicationRef

import {ApplicationRef} from 'angular2/core'; 

constructor(private appRef:ApplicationRef) {} 

oldFeeds() { 
    return new Promise((resolve, reject) => { 
    this.storage.get('feeds').then(data => { 
     resolve(JSON.parse(data)); 
     this.appRef.tick(); 
    }); 
    }); 
} 

original

funktionierte nicht verwenden - siehe Kommentare

constructor(private zone:NgZone) {} 

oldFeeds() { 
    return new Promise((resolve, reject) => { 
    this.storage.get('feeds').then(data => { 
     this.zone.run(() => { 
     resolve(JSON.parse(data)); 
     }); 
    }); 
    }); 
} 

Sieht so aus, als ob die SqlStorage-API nicht von der Angulars-Zone gepatcht wird und der Aufruf "manuell" in die Angulars-Zone zurückgebracht werden muss, damit die Änderungserkennung ausgeführt wird.

Siehe auch Triggering Angular2 change detection manually

+0

Vielen Dank! Obwohl der NgZone nicht funktionierte, funktionierte der ApplicationRef! – akz92

+0

Könnte mit der Verwendung von 'Promise' in Verbindung stehen. Ich habe es in diesem Zusammenhang nicht benutzt. –

+0

Aktualisiert. Danke für die Rückmeldung :) –

Verwandte Themen