Ionic 4双面菜单-打开特定菜单

时间:2019-02-08 18:29:40

标签: angular ionic-framework ionic4

如何打开特定菜单Ionic 4双面菜单? 例如:

<ion-menu #menuA menuId="menuA" side="start">
  <ion-header>
    <ion-toolbar color="primary">
      <ion-title>Start Menu</ion-title>
    </ion-toolbar>
  </ion-header>
  <ion-content>
    <ion-list>
      <ion-menu-toggle auto-hide="false" *ngFor="let p of appPages">
        <ion-item [routerDirection]="'root'" [routerLink]="[p.url]">
          <ion-icon slot="start" [name]="p.icon"></ion-icon>
          <ion-label>
            {{p.title}}
          </ion-label>
        </ion-item>
      </ion-menu-toggle>
    </ion-list>
  </ion-content>
</ion-menu>

<ion-menu #menuB menuId="menuB" side="end" type="push">
  <ion-header>
    <ion-toolbar color="danger">
      <ion-title>End Menu</ion-title>
    </ion-toolbar>
  </ion-header>
  <ion-content>
    <ion-list>
      <ion-menu-toggle auto-hide="false" *ngFor="let p of appPages">
        <ion-item>
          zxzxz
        </ion-item>
      </ion-menu-toggle>
    </ion-list>
  </ion-content>
</ion-menu>

当我单击工具栏按钮时,它总是打开左侧菜单。 有任何想法吗? Tnx。

2 个答案:

答案 0 :(得分:1)

从文档[{https://ionicframework.com/docs/api/menu/]

您可以使用MenuController在单击时打开具有以下功能的菜单

html

<ion-menu side="start" menuId="first">
  <ion-header>
    <ion-toolbar color="primary">
      <ion-title>Start Menu</ion-title>
    </ion-toolbar>
  </ion-header>
  <ion-content>
    <ion-list>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
    </ion-list>
  </ion-content>
</ion-menu>

<ion-menu side="end" type="push">
  <ion-header>
    <ion-toolbar color="danger">
      <ion-title>End Menu</ion-title>
    </ion-toolbar>
  </ion-header>
  <ion-content>
    <ion-list>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
      <ion-item>Menu Item</ion-item>
    </ion-list>
  </ion-content>
</ion-menu>

在TS

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

@Component({
  selector: 'menu-example',
  templateUrl: 'menu-example.html',
  styleUrls: ['./menu-example.css'],
})
export class MenuExample {

constructor(private menu: MenuController) { }

  openFirst() {
    this.menu.enable(true, 'first');  // replace with MenuA for your case
    this.menu.open('first');
  }

  openEnd() {
    this.menu.open('end'); //replace with MenuB
  }
}

答案 1 :(得分:0)

完全同意#Dananjai Pai的上述回答。如果可以的话,我会发表评论。只是为了澄清。据我所知,您不能仅依赖menuId和menu。如图所示,您需要显式启用所需的菜单。

在您的ts文件中:

import { LoadingController, MenuController } from '@ionic/angular';

constructor(
    private menuCtrl: MenuController,
    private router: Router
  ) {}

  openMenu() {
    this.menuCtrl.enable(true, 'menuA')
    .then(myMenu => {
      // console.log(myMenu);
      this.menuCtrl.open('menuA');
    });
  }

然后在您的模板中:

<ion-header>
  <ion-toolbar>
    <ion-buttons slot="start">
      <!--ion-menu-button autoHide="false" menu="master"></ion-menu-button-->
      <ion-button (click)="openMenu()">
        <ion-icon name="menu" slot="icon-only"></ion-icon>
      </ion-button>
    </ion-buttons>
    <ion-title>My Devices</ion-title>
  </ion-toolbar>
</ion-header>

因此,如果不需要,您不需要使用离子菜单按钮。这可以很容易地扩展为在同一页面和其他页面中使用其他菜单(使用它们的menuId)。关键只是在尝试打开它之前,以编程方式启用您想要的那个!在Ionic 4中效果很好。