不希望页面在查看时刷新 - Ionic 2+

时间:2017-09-26 14:22:45

标签: ionic-framework ionic2 ionic3

当用户第一次查看主屏幕时 - 它们将通过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刷新?还是完全使用别的东西?

由于

3 个答案:

答案 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;
    }
}