在我的Ionic 2应用程序中,我从SqlStorage和HTTP.get请求中获取数据。当我从HTTP请求获取数据时,我的页面使用新数据按预期刷新,但是当我从SqlStorage获取数据时,它不会刷新,只有当我'刷新'时才会显示新数据。
PS:我正在使用TypeScript。
这是SqlStorage get:
oldFeeds() {
return new Promise((resolve, reject) => {
this.storage.get('feeds').then(data => {
resolve(JSON.parse(data));
});
});
}
这是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));
});
}
这些方法在服务中,对它们的调用完全相同:
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;
});
关于为什么会发生这种情况的任何想法以及我可以做些什么来解决它? 谢谢!
答案 0 :(得分:1)
<强>更新强>
轻微改变检测“手动”可以使用 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();
});
});
}
<强>原始强>
无效 - 请参阅评论
constructor(private zone:NgZone) {}
oldFeeds() {
return new Promise((resolve, reject) => {
this.storage.get('feeds').then(data => {
this.zone.run(() => {
resolve(JSON.parse(data));
});
});
});
}
看起来SqlStorage API没有被Angulars区域修补,并且需要“手动”将呼叫带回Angulars区域以便运行变更检测。