从存储中获取数据不会刷新页面内容

时间:2016-04-17 18:09:44

标签: angular promise observable ionic2

在我的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;
});

关于为什么会发生这种情况的任何想法以及我可以做些什么来解决它? 谢谢!

1 个答案:

答案 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区域以便运行变更检测。

另见Triggering Angular2 change detection manually