Ionic 2 толкает дочерний вид внутри вкладок Вид с боковой навигацией

У меня проблема с навигацией по меню ionic 2+ с вкладками. Когда я нажимаю меню навигации, как получить доступ к дочернему представлению внутри представления вкладок?

Я нашел несколько решений для доступа к корневой странице вкладок, но до сих пор я не мог получить доступ к дочернему представлению. Если я нажму дочернее представление непосредственно в app.component.ts, вкладки исчезнут. Оно будет прятаться.

Вот мой app.component.ts

import { AboutPage } from './../pages/about/about';
import { Component, ViewChild } from '@angular/core';

import { Events, MenuController, Nav, Platform, NavController } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { App } from 'ionic-angular';

import { ConferenceData } from '../providers/conference-data';
import { UserData } from '../providers/user-data';

export interface PageInterface {
  title: string;
  name: string;
  component: any;
  icon: string;
  logsOut?: boolean;
  index?: number;
  tabName?: string;
  tabComponent?: any;
}

@Component({
  templateUrl: 'app.template.html'
})

export class TestApp {

  @ViewChild(Nav) nav: Nav;
  @ViewChild('mycontent') childNavCtrl: NavController;

  appPages: PageInterface[] = [

{ title: 'ABOUT US', name: 'TabsPage', component: TabsPage, tabComponent: AboutPage, index: 3, icon: 'assets/img/about-small.png' },


  ];
  rootPage: any;


  constructor(
    public events: Events,
    public userData: UserData,
    public menu: MenuController,
    public platform: Platform,
    public confData: ConferenceData,
    public storage: Storage,
    public splashScreen: SplashScreen,
    public appCtrl: App,
  ) {

  }

  openPage(page: PageInterface) {
    let params = {};

    if (page.index != null) {
      params = { tabIndex: page.index };
    }


    if (this.nav.getActiveChildNavs() && page.index != undefined) {
      //  push the view here //
    } else {
      alert('else');
      this.nav.setRoot(page.name, params).catch((err: any) => {
        console.log(`Didn't set nav root: ${err}`);
      });
    }

Вот мой app.modules.ts

@NgModule({
  declarations: [
    testApp,
    AboutPage,
    AccountPage,
    LoginPage

  ],
  imports: [
    BrowserModule,
    HttpModule,

    IonicModule.forRoot(testApp, {}, {
      links: [
    { component: TabsPage, name: 'TabsPage', segment: 'tabs-page' },
    { component: GalleryDetailsPage, name: 'Gallery details', segment: 'gallery Details' },
    { component: AboutPage, name: 'About', segment: 'about' },
  ]
    }),
    CloudModule.forRoot(cloudSettings),
    IonicStorageModule.forRoot()
  ],
      bootstrap: [IonicApp],
      entryComponents: [
       testApp,
    AboutPage,
  ],
  providers: [
{ provide: ErrorHandler, useClass: IonicErrorHandler },
        ConferenceData,
    UserData,
    SocialSharing,
    InAppBrowser,
    Geolocation,
    PostPage,
    ImagePicker,
    Camera,
    SplashScreen
  ]
})

export class AppModule { }

вот мой мой app.template.html

<ion-content class="menu-contents">
        <ion-list class="menu-con">
            <button ion-item class="cus-item" menuClose *ngFor="let p of appPages" (click)="openPage(p)">

      <!-- ion-icon item-start [name]="p.icon" [color]="isActive(p)"></ion-icon -->
      <img [src]="p.icon" class="menu-item-img {{p.title === 'POST' ? 'post-icon' : ''}}" alt=""><span class="menu-item-title">{{p.title}}</span>
    </button>
        </ion-list>


    </ion-content>

вот моя страница вкладок:

import { HomePage } from '../home/home';
import { Component } from '@angular/core';

import { NavParams, MenuController, NavController } from 'ionic-angular';

import { AboutPage } from '../about/about';

import { SchedulePage } from '../dash/schedule';

@Component({
  selector : 'tabs-view',
  templateUrl: 'tabs-page.html'
})


export class TabsPage {
  // set the root pages for each tab
  tab1Root:any;
  tab2Root: any = SchedulePage;
  tab3Root: any = AboutPage;
  mySelectedIndex: number;

  constructor(
    navParams: NavParams,
    public menu: MenuController,
    public navCtrl: NavController,
  ) {

    this.tab1Root = HomePage;
    console.log('ONE', navParams.data);

    if (navParams.data.tabIndex != null) {



  }
}

  ionViewDidLoad() {
    this.menu.enable(true);
  }


}

вот мои вкладки.html:

<ion-tabs [selectedIndex]="mySelectedIndex" name="weddingapp" #myTabs>
<ion-tab [root]="tab1Root" tabTitle="" tabIcon="icon-home"></ion-tab>
<ion-tab [root]="tab2Root" tabTitle="" tabIcon="icon-dash"></ion-tab>
<ion-tab [root]="tab3Root" tabTitle="" tabIcon="icon-user" class="custom-icon1">user</ion-tab>

Here is my Shedulepage.ts

@Component({
  selector: 'page-schedule',
  templateUrl: 'schedule.html'
})
export class SchedulePage {

  @ViewChild('scheduleList', { read: List }) scheduleList: List;


  constructor(
    public alertCtrl: AlertController,
    public app: App,
    public loadingCtrl: LoadingController,
    public modalCtrl: ModalController,
    public navCtrl: NavController,
    public toastCtrl: ToastController,
    public confData: ConferenceData,
    public user: UserData,
    public menu: MenuController,
     navParams: NavParams,
  ) {
      console.log(navParams.data);

  }

GotoLinks(val:any){

this.navCtrl.push(ContactPage);


}

person premkumar.T devoloper    schedule 17.08.2017    source источник


Ответы (1)


Если вы хотите втолкнуть ребенка внутрь, то у меня есть

import { NavController} from 'ionic-angular';

constructor(public navCtrl: NavController){}

myFunction(){
this.navCtrl.push(SomePage);
}

Если вы хотите нажать внутри вкладки

import { App} from 'ionic-angular';

constructor(public app: App){}

myFunction(){
this.app.getRootNav().push(SomePage);
}
person Symeon Mattes    schedule 22.01.2018
comment
Спасибо за ваш ответ, @Symeo Mattes. Итак, наконец, я понял это с тем, что вы сейчас поделились, также я добавил прослушиватель событий для динамической логики. - person premkumar.T devoloper; 31.03.2020