我从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);
}
}
答案 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");
}
}