如何访问父navController离子2

use*_*203 3 javascript ionic2 angular

我正在通过构建一个简单的应用程序来学习Ionic 2,但我遇到了一个我无法解决的问题.

该应用程序具有登录页面的离子导航功能,登录后会进入选项卡导航器.所以应用程序导航将是这样的:

app<Nav> {
    LoginPage,
    restrictedTabs<Nav> {
        Page1,
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我在Page1内部时,我不知道如何访问appNav,所以我可以,例如,注销用户并阻止他从"restrictedTabs".

我试过像@ViewChild那样的文档

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

@Component({
  templateUrl: 'page1url...'
})
export class ProfilePage {
    @ViewChild('appNav') appNav : NavController

    constructor(private _nav: NavController) {

    }

    pushNewPlace() {
        console.log(this._nav.rootNav);
        console.log(this._nav.parent);
    }

    ngAfterViewInit() {
      console.log(this.appNav);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是appNav总是未定义的,rootNav也是如此(我在一些教程中已经看过......).如果我在LoginPage控制器上尝试@ViewChild('appNav')它运行良好

Vin*_*rez 21

因为您的navcontroller是本地的,所以您需要访问rootNav.这要归功于appController.选项卡正在"根"视图中创建视图.

在其中一个选项卡中加载的页面中:

首先,从离子角导入导航,与navController相同的位置

import { App, NavController } from 'ionic-angular';
Run Code Online (Sandbox Code Playgroud)

一定要有你的loginPage

import { LoginPage } from 'pages/login/login';
Run Code Online (Sandbox Code Playgroud)

然后在你的构造函数中提供它:

constructor(public navCtrl: NavController, public appCtrl: App) 
Run Code Online (Sandbox Code Playgroud)

现在你可以访问rootnav了:

this.appCtrl.getRootNav().setRoot(myLoginPage);
Run Code Online (Sandbox Code Playgroud)