2016-10-19 10 views
7

私は、サイドメニュースタータからイオン2アプリを開始しました。今私は、アプリケーションコンポーネント(メニュー)に生成されたコードをフォルダに移動し、代わりにホームコンポーネントを書きたいと思っています。私がアプリを実行すると、私にこのエラーが表示されます:NavControllerのプロバイダはありません

オリジナル例外: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'); 
    } 
} 

と私は私のメニューに(sidemenu)をリダイレクトするページ:

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); 
    }  
} 

答えて

2

私はこの問題を回避することによって、これを解決しました。私は読んでいたと私はthisポストがsometinhg similiarを求めていることが分かった。

ので、私はちょうどこのに私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; 
    ... 
} 

は、今私はすべての問題を持っていけません。

+0

自己答え、良い:) –

+1

を動作するようにそのことを強制が、イム幸せな今 –

+0

からNavControllerは、ナビゲーションの唯一の子クラスです。あなたは実際にapp.component.tsにナビをViewChildする必要があります。そこで、あなたのナビゲーションを他のコンポーネントに渡すことができます。いつものように循環依存性に注意してください。 – nottinhill

5

ハードワーク:)おかげでこの回避策を見つけるために、次の方法で

constructor(
    protected app: App 
) { 

... 

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

最初の質問に答えるためには、navCtrl関数を無視して、次のようにします: 'onLogin(){this.app.getActiveNav()。setRoot(pantryList); } '。 'App'は' ionic-angular'からインポートされます。 – Yvan

関連する問題