Ionic2:如何在每个子视图中使用不同的离子菜单

问题描述 投票:4回答:2

我正在尝试学习Ionic2侧面菜单的使用,并希望看看我是否可以在每个子视图中使用单独的侧面菜单。

我已经安装了一个入门应用程序,它在主应用程序中有一个离子菜单,即我们在bootstrap app.html文件中

<ion-menu [content]="content">

 <ion-toolbar>
   <ion-title>Pages</ion-title>
 </ion-toolbar>

 <ion-content>
   <ion-list>
     <button menuClose ion-item *ngFor="let p of pages" (click)="openPage(p)">
       {{p.title}}
     </button>
   </ion-list>
  </ion-content>

</ion-menu>

<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>

然后我添加了自己的页面,并在示例应用程序的初始根页面getting-started.ts中添加以下内容以导航到我的新页面。

public goToSideMenuPage(): void{    
   this._navController.push(SideMenuPage);

我还添加了一个按钮来调用上面的处理程序。

在SideMenuPage中,我希望它有自己完全不同的侧面菜单。我试过以下......

<ion-menu [content]="thecontent">
<ion-toolbar>
  <ion-title>Menu title</ion-title>
</ion-toolbar>

<ion-content>
 <ion-list>
    <button>button1</button>
    <button>button2</button>
 </ion-list>
 </ion-content>
</ion-menu>

<ion-content #thecontent>
  <div>Main contents text</div>
 </ion-content>

然而,当我转到我的页面时,我看到的只是左上角的Main contents text。我没有看到菜单汉堡图标,如果我向右拖动,我看到app.html中设置的应用程序主菜单,而不是我自己的“本地”菜单,内容为

<button>button1</button>
<button>button2</button>

在doco找到了here,该演示确实显示了在运行时交换的侧边菜单,但我无法在任何地方看到它的实际代码。这接近我想要做的事情(尽管我希望它根据我导航到的子页面进行交换),所以看起来它可能看起来像是可能的,但我只是看不出我应该怎么做这样做。

有谁知道这是否可能,如果是的话,怎么做?

angular typescript ionic-framework ionic2 ionic3
2个回答
8
投票

您正在寻找的信息位于Ionic2文档的MenuController部分。这可以通过添加app.html中的菜单来完成,但是为它们分配如下ID:

<ion-menu [content]="content" side="left" id="menu1">
  <ion-toolbar secondary>
    <ion-title>Menu 1</ion-title>
  </ion-toolbar>
  <ion-content>
    <ion-list>
      <button ion-item menuClose="menu1" detail-none>
        Close Menu 1
      </button>
    </ion-list>
  </ion-content>
</ion-menu>

<ion-menu [content]="content" side="right" id="menu2">
  <ion-toolbar danger>
    <ion-title>Menu 2</ion-title>
  </ion-toolbar>
  <ion-content>
    <ion-list>
      <button ion-item menuClose="menu2" detail-none>
        Close Menu 2
      </button>
    </ion-list>
  </ion-content>
</ion-menu>

<ion-nav [root]="rootPage" #content></ion-nav>

然后,在每个页面中,我们可以决定应该激活哪个菜单,如下所示:

  constructor(private menu: MenuController, private nav: NavController) { }

  ionViewDidEnter() {
    // Use the id to enable/disable the menus
    this.menu.enable(true, 'menu1');
    this.menu.enable(false, 'menu2');
  }

此外,请注意我使用this.nav.setRoot(Page1);而不是像this.nav.push(Page1);这样的东西显示第二页。


编辑:如果你想同时激活这两个菜单,请看看this answer


编辑2:就像@peterc在评论中所说:

如果我在我的页面sidemenu-page.html中设置了侧边菜单并设置了this.menu.enable(true,'menu1'),我发现这也有效。在它的组件中(因此可以选择让侧面菜单包含将切换到它的页面标记)。

我将其添加到答案中,因为将要使用它的视图似乎是放置菜单而不是app.html的更好的地方。


1
投票

为了@ user623396,只需将此作为@sebaferreras给出的信息的一部分添加

要在实际视图中使用侧边菜单,我有以下内容......

    <ion-menu [content]="thecontent" id='menu1'>
      <ion-toolbar>
        <ion-title>Title</ion-title>
      </ion-toolbar>

      <ion-content>
        <ion-list>
          <button>button1</button>
          <button>button2</button>      
        </ion-list>
      </ion-content>
    </ion-menu>

    <ion-navbar *navbar>
      <button menuToggle>
        <ion-icon name="menu"></ion-icon>
      </button>
      <ion-title>Getting Started</ion-title>
    </ion-navbar>

    <ion-content #thecontent>
      <div>Some text</div>  
    </ion-content>

然后在组件文件中

    import {Component} from '@angular/core';
    import {MenuController, NavController} from 'ionic-angular';

    // Use the pipe TranslatePipe to use in the markup
    @Component({
      templateUrl: 'build/pages/sidemenu-page/sidemenu-page.html'
    })
    export class SideMenuPage {
      public rootPage = SideMenuPage;

      public myVal: string;  

      constructor(private menu: MenuController, private nav: NavController, private tranlate: TranslateService){
      }

      ionViewDidEnter() {
        this.menu.enable(true, 'menu1');
      }  
    }

希望这对于Ionic的最新版本仍然是正确的(自从我看过这个例子已经有一段时间了)

© www.soinside.com 2019 - 2024. All rights reserved.