当用户第一次查看主屏幕时 - 它们将通过this.nav.setRoot(Page)发送到那里。当我有三个其他页面设置根目录到页面时,这会出现问题。例如 - 我转到设置为root的主页,以便首次加载主页数据。然后用户导航到消息页面。然后用户返回主页,再次重新加载数据。我不希望这种情况发生。我想只调用一次,但由于setRoot,它会刷新页面。就像navCtrl.push(Page)和.pop一样,数据不会刷新。我有一个汉堡包导航样式,这就是为什么我在汉堡包导航中为每个页面设置了根。
app.comp.ts
openPage() {
this.nav.setRoot(Page);
}
openPageTwo() {
this.nav.setRoot(MessagesPage);
}
如何覆盖nav.setRoot刷新?还是完全使用别的东西?
由于
答案 0 :(得分:2)
您在哪里刷新数据?在什么功能?
生命周期事件
我认为您的问题将通过使用正确的lifecycle event来解决。例如,ionViewDidLoad
:
页面加载后运行。此事件仅在每个页面创建时发生一次。如果页面已离开但已缓存,则此事件将不会在后续查看时再次触发。 ionViewDidLoad事件是放置页面设置代码的好地方。
您是否尝试过刷新数据?
全局变量或服务
作为替代方案,您可以创建一个全局变量或保存数据的服务。首次将“设置”设置为页面后,请执行刷新并更新全局值,并且不要在以后将setRoot设置为该页面时对其进行刷新。这不是我最喜欢的方式,但会为你完成这项工作。
<强>选项卡:强>
您可能想尝试ionic tabs。
,而不是多次设置根答案 1 :(得分:1)
通过使用navCtrl.setRoot()设置根页,您可以告诉Ionic此页面是应用程序导航树的开头。例如,登录后,您应该.setRoot(HomePage);
如果要从HomePage导航到MessagesPage,则应使用navCtrl.push()在主页顶部弹出MessagesPage。例如; navCtrl.push(MessagesPage);
答案 2 :(得分:0)
您可以使用提供程序,因为它只存储在内存中一次,每次注入它都会获得其属性和数据。
some-provider.ts
import { Injectable } from '@angular/core';
@Injectable()
export class SomeProvider {
public data: DataModel;
constructor(public http: Http) {
}
}
然后将其导入应用的模块providers
变量。
之后,在组件的构造函数
上获取此提供程序 some-page.ts
@Component({
selector: 'app-some-page',
templateUrl: 'app-some-page.html'
})
export class AppSomePage {
data: DataModel;
constructor(public someProvider: SomeProvider) {
this.data = this.someProvider.data;
}
}