没有NavController的提供者

时间:2016-10-19 12:48:02

标签: angular navigation ionic2

我从sidemenu启动器开始了一个离子2应用程序。现在我想将生成的代码组件(菜单)中的代码移动到一个文件夹中,然后编写一个home组件。当我运行应用程序时,它显示了这个错误:

ORIGINAL EXCEPTION:没有NavController的提供者!

我app.component的代码是:

import { Component } from '@angular/core';
import { NavController, Platform } from 'ionic-angular';
import { StatusBar } from 'ionic-native';

import { Login } from '../pages/login/login';

@Component({
  templateUrl: 'app.html'
})
export class MyApp {

  nav: NavController;

  constructor(public platform: Platform, nav: NavController) {
    this.nav = nav;
    this.initializeApp();
  }

  initializeApp() {
    this.platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      StatusBar.styleDefault();
    });
  }

  registerUserWithFacebook(){
    console.log('Facebook');
    //this.nav.setRoot(pantryList);
  }

  registerUserWithGoogle() {
    console.log('Google');
    //this.nav.setRoot(pantryList);
  }

  openSignUpPage(){
    console.log('Signup');
    //this.nav.setRoot(Signup);
  }

  openLoginPage(){
    console.log('Login');
    this.nav.push(Login);
  }

  openTermsOfService(){
    console.log('Terms of service');
  }
}

我想重定向到我的菜单(侧面菜单)页面:

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

import { pantryList } from '../pantryList/pantryList';

@Component({
    templateUrl: "login.html"
})
export class Login {

    email: string;
    password: string;

    constructor(public navCtrl: NavController) {
    }

   onLogin() {
      this.navCtrl.setRoot(pantryList);
   }    
}

3 个答案:

答案 0 :(得分:5)

强迫那件东西以下一种方式工作

  constructor(
    protected app: App
  ) {

...

  get navCtrl(): NavController {
    return this.app.getActiveNav();
  }

答案 1 :(得分:3)

我通过解决方法解决了这个问题。我正在阅读,我发现this发帖询问某些类似的东西。

所以我只需将app.html更改为:

<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>

我的app.component到此:

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

  rootPage: any = Home;
  ...
}

现在当我在我的主页重定向时,我没有任何问题。

答案 2 :(得分:0)

上述解决方案有效。此外,如果遇到与我相同的情况,请检查以下内容。

我在可注入NavController文件中意外添加Provider时遇到了相同的错误。

@Injectable()
export class UtilsProvider {

  constructor(
    private toastCtrl: ToastController,
    public loadingCtrl: LoadingController,
    public navCtrl: NavController // *** Make sure to remove this line from Providers***
  ) {
    console.log("Hello UtilsProvider");
    if (!this.isDev) console.log("Productions build");
  }
}