我有一个ionic2应用程序,其中我有几页。点击第1页的按钮,我导航到第2页和ionViewDidLoad(第2页),我正在调用数据服务并在列表中呈现数据。 接下来,当我通过单击顶部的后退按钮导航回来时,我转到第一页。再说一遍,如果我点击第一页的按钮,我会导航到第二页。但是,在这种情况下,再次进行服务调用,这意味着再次触发ionViewDidLoad(这是我想要避免的)
如何保留第二个视图的先前状态?我没有使用setRoot。我正在使用导航器的推送和弹出。
答案 0 :(得分:2)
是的,在推送和弹出之后在任何页面中重新调用构造函数和ionViewDidLoad()
是Ionic 2中的预期行为(请参阅discussion on GitHub)。
由于您已经在使用数据服务来获取每个页面的数据,因此您可以将数据存储在那里。如果您有一些耗时的数据加载,例如从数据库中,您可以将加载的数据存储在服务中,并将其返回到以下调用中的页面。
例如在data-service.ts
中:
public getData() {
// data already loaded, just return it
if (this.data) {
return Promise.resolve(this.data);
}
// data not loaded yet, get it from database
return new Promise(resolve => {
... loading data from database to this.data ....
resolve(this.data);
});
}
然后在sample-page.ts
:
private initData() {
this.dataService.getData().then(data => {
this.data = data;
});
}