Ionic 3 Tab Navigation + боковое меню - PullRequest
0 голосов
/ 06 июня 2018

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

Использование навигации по вкладкам делает приложение похожим на SPA, который я предполагаю, в этомстраница загружается в виде.Однако, когда я перемещаюсь с помощью бокового меню, я сразу перехожу к той странице, которая обходит точку навигации по вкладкам.

Есть ли способ заставить их работать вместе?

app.component.ts:

   import { Component, ViewChild } from '@angular/core';
   import { Nav, Platform } from 'ionic-angular';
   import { StatusBar } from '@ionic-native/status-bar';
   import { SplashScreen } from '@ionic-native/splash-screen';

   import { HomePage } from '../pages/home/home';
   import { Settings } from '../pages/settings/settings';
   import { Journeys } from '../pages/journeys/journeys';

   import { TabsPage } from '../pages/tabs/tabs';

   @Component({
       templateUrl: 'app.html'
   })
   export class MyApp {
       @ViewChild(Nav) nav: Nav;

   rootPage: any = TabsPage;

   pages: Array<{title: string, component: any}>;

   constructor(public platform: Platform, public statusBar: StatusBar, 
   public splashScreen: SplashScreen) {
       this.initializeApp();


       this.pages = [
           { title: 'Home', component: HomePage },
           { title: 'Settings', component: Settings },
           { title: 'Journeys', component: Journeys }
       ];

   }

   initializeApp() {
       this.platform.ready().then(() => {
           this.statusBar.styleDefault();
           this.splashScreen.hide();
       });
   }

   openPage(page) {
       this.nav.setRoot(page.component);
   }
 }

app.html:

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

 <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>

Tabs.ts:

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


import { HomePage } from '../home/home';
import { Journeys } from '../journeys/journeys';
import { Settings } from '../settings/settings';




@Component({
   templateUrl: 'tabs.html'
})
export class TabsPage {

  tab1Root = HomePage;
  tab2Root = Journeys;
  tab3Root = Settings;

  constructor() {

  }
}

Tabs.html:

<ion-tabs>
<ion-tab [root]="tab1Root" tabTitle='Home' tabIcon='ios-home'></ion-tab>
<ion-tab [root]="tab2Root" tabTitle='Journeys' tabIcon='ios-car'></ion-tab>
<ion-tab [root]="tab3Root" tabTitle='Settings' tabIcon='md-settings'></ion-tab>

homepage.html:

   <ion-header>
       <ion-navbar>
           <button ion-button menuToggle>
           <ion-icon name="menu"></ion-icon>
       </button>
       <ion-title>Home</ion-title>
       </ion-navbar>
   </ion-header>

   <ion-content padding>
       <ion-grid>
           <ion-row>
               <ion-col col-12>
                    <p class='homepage_placeholder'>Homepage Placeholder</p>
               </ion-col>
           </ion-row>
     </ion-grid>
 </ion-content>

1 Ответ

0 голосов
/ 07 июня 2018

Во-первых, добавьте tabIndex к вашему this.pages

this.pages = [
    { title: 'Home', component: HomePage, tabIndex:0 },
    { title: 'Settings', component: Settings, tabIndex:1 },
    { title: 'Journeys', component: Journeys, tabIndex:2 }
    { title: 'PageNotInTab', component: componentName }
];

А затем сделайте свой openPage() такой, как этот

openPage(page): void{
    if(page.tabIndex){
      this.nav.setRoot(TabsPage,{selectedIndex:page.tabIndex})
    }else{
        this.nav.setRoot(page.component,{})
    }
}

Cousre, TabsPage должен быть подготовлен дореализуя код выше.Я опускаю детали.

В TabsPage

ngAfterContentInit(){       
  if(this.navParams.data.hasOwnProperty("selectedIndex"))
    this._selectedIndex = this.navParams.get("selectedIndex")
  else
    this._selectedIndex=0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...