Как сделать так, чтобы меню отображалось правильно при навигации между страницами? - PullRequest
6 голосов
/ 30 сентября 2019

Приложение, которое я разрабатываю, имеет такую ​​структуру: есть две основные страницы с разными боковыми меню.

При доступе к первой странице отображается правильное меню. При доступе ко второй странице с первой страницы также отображается правое меню. Проблема возникла при попытке перейти на первую страницу снова. Второе меню правильно скрыто, но меню с первой страницы никогда не отображается.

enter image description here

Это небольшой репозиторий, показывающий проблему: https://github.com/iamkinetic/ionic4-multiple-menus-bug

Кажется, что каждая версия Ionic (от 4.6 до 4.10) имеет эту проблему, и даже ручное включение меню не решает проблему полностью. Я делаю что-то неправильно? Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 06 октября 2019

У меня была точно такая же проблема. Я только что сделал новый угловой компонент под названием меню и просто ввел его во все компоненты, которые в нем нуждались. Это происходит потому, что на ionicMenu больше нет ссылок, когда вы вернетесь. Вы не можете использовать ионный Cli здесь. Возможно, вам придется вручную решить это. Я отредактирую снова, если найду код и вставлю его здесь.

ОБНОВЛЕНИЕ : Вот шаги.

  1. Создайте компонент ионной страницы с именем menuиспользуя ionic-cli
  2. Добавьте это в HTML
<ion-header>
  <ion-toolbar [color]="currentColor">
    <ion-buttons slot="start">
      <ion-menu-button></ion-menu-button>
    </ion-buttons>
    <ion-title>
      My App
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-menu contentId="child-content" side="start" menuId="custom" class="my-custom-menu" type="overlay">
  <ion-header>
    <ion-toolbar [color]="currentColor">
      <ion-title>Menu</ion-title>
    </ion-toolbar>
  </ion-header>
  <ion-content>
    <ion-list (click) = "closeMenu()">
      <ion-item routerLink="/dashboard/home" closeMenu>Home</ion-item>
      <ion-item routerLink="/dashboard/myorder" menuClose>My Order</ion-item>
      <ion-item routerLink="/dashboard/aboutus" menuClose>About us</ion-item>
      <ion-item routerLink="/dashboard/contactus" menuClose>Contact us</ion-item>
      <ion-item routerLink="/dashboard/feedback" menuClose>Feedback</ion-item>
      <ion-item (click) = "logout()">Log Out</ion-item>
    </ion-list>
  </ion-content>
</ion-menu>
<ion-content overflow-scroll="true">
  <ion-router-outlet id="child-content"></ion-router-outlet>
</ion-content>
Скопируйте все маршруты, для которых вы хотите компонент меню, из app-routing.module.ts и вставьте их в menu.module.ts, как
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';

import { IonicModule } from '@ionic/angular';

import { MenuPage } from './dashboard.page';

const routes: Routes = [
  {
    path: '',
    component: MenuPage,
    children: [
      {
        path: '', redirectTo: 'home', pathMatch: 'full'
      },
      { path: 'schedule', loadChildren: '../schedule/schedule.module#SchedulePageModule' },
      { path: 'orderstatus/:id', loadChildren: '../orderstatus/orderstatus.module#OrderstatusPageModule' },
      { path: 'payment', loadChildren: '../payment/payment.module#PaymentPageModule' },
      { path: 'aboutus', loadChildren: '../aboutus/aboutus.module#AboutusPageModule' },
      { path: 'contactus', loadChildren: '../contactus/contactus.module#ContactusPageModule' },
      { path: 'howitworks', loadChildren: '../howitworks/howitworks.module#HowitworksPageModule' },
      { path: 'myorder', loadChildren: '../myorder/myorder.module#MyorderPageModule' },
      { path: 'orderdetails/:id', loadChildren: '../orderdetails/orderdetails.module#OrderdetailsPageModule' },
      { path: 'feedback', loadChildren: '../feedback/feedback.module#FeedbackPageModule' },
      { path: 'home', loadChildren: '../home/home.module#HomePageModule' },
    ]
  },
];

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    RouterModule.forChild(routes)
  ],
  declarations: [MenuPage]
})
export class MenuPageModule { }

Теперь у вас должно быть общее меню для всех маршрутов в разделе меню. И должен иметь возможность доступа к ним как /menu/somepage, если вам не нравится menu в пути, измените его на что-то вроде dashboard или что-то в app-routing.module.ts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...