离子navCtrl.push打开页面的新会话,但我需要已经打开一个

时间:2018-07-07 11:44:49

标签: angular ionic-framework ionic2 ionic3

在我的Ionic应用程序中,有一个页面可以创建invoice。我正在开具发票,中间需要打开statement of accounts

现在,如果从statement of accounts中按返回按钮,则我的部分填充 invoice表单将打开,而不会丢失任何数据。

但是,如果我从菜单中打开invoice表单,它将打开一个新的具有相同表单的黑色会话。

我希望它打开已经打开的,部分填充的invoice表单。

这是我从app.html页面上调用页面的方式:

<ion-item class="DropDown-Expand" menuClose (click)="nav.push(page.StatacPage)">
  <ion-icon name="document"></ion-icon><span>Ledger</span>
</ion-item>

1 个答案:

答案 0 :(得分:1)

然后检查您的发票页面是否已经在navControllers堆栈中并弹出至该页面(如果它已存在于navControllers堆栈中)或推送它的新实例(如果它在navControllers堆栈中不存在)。

执行此操作的方法的代码可能类似于以下内容(假设this.navCtrl拥有一个NavController实例,有关注入它的更多信息可以在here中找到):

 moveTo(pageToMoveTo: Page): void {
    let views = this.navCtrl.getViews();
    let viewToMoveTo = views.find((viewController) => viewController.instance instanceof pageToMoveTo);
    if (viewToMoveTo === undefined) {
      //If the page is not yet on the navControllers stack, push it
      this.navCtrl.push(pageToMoveTo);
    } else {
      //If the page is on the stack, find the pages index
      let indexToMoveTo = this.navCtrl.getByIndex(viewToMoveTo.index);
      //And pop to this index
      this.navCtrl.popTo(indexToMoveTo);
    }
}

在HTML中,您应该可以像这样使用它:

<ion-item class="DropDown-Expand" menuClose (click)="moveTo(page.StatacPage)">
  <ion-icon name="document"></ion-icon><span>Ledger</span>
</ion-item>

有关NavController如何工作的更多信息,请参阅NavControllers docs