Ionic App Error: StaticInjectorError(AppModule)[Content -> NavController]:
Ionic App Error: StaticInjectorError(AppModule)[Content -> NavController]:
我在 constructor
组件上放置任何内容时遇到错误。
我制作了我的组件 menu
这是我的 app.html:
<menu-component [content]="content"></menu-component>
<ion-nav #content [root]="rootPage"></ion-nav>
<!-- I have to maintain this line here and on the MenuComponent cause the app didn't load the content without it... Don't know why-->
这是我的菜单组件:
<ion-menu [content]="content">
<ion-content>
<ion-list>
<button menuClose ion-item *ngFor="let page of pages" (click)="openPage(page)">
<ion-icon name="{{page.icon}}"></ion-icon>
{{page.title}}
</button>
</ion-list>
</ion-content>
</ion-menu>
<ion-nav #content [root]="rootPage"></ion-nav>
<!-- See same line of app.html -->
这是我的MenuComponent.ts:
import { Component, Input } from '@angular/core';
import { NavController } from 'ionic-angular';
/* PAGES */
import { HomePage } from '../../../pages/home/home';
import { ContactPage } from '../../../pages/contact/contact';
@Component({
selector: 'menu-component',
templateUrl: 'menu.component.html'
})
export class MenuComponent {
@Input() content;
pages: Array<{ title: string, component: any, icon: string }>;
//This doesn't work
// constructor( private navCtrl: NavController ) {
//This does
constructor( ) {
this.pages = [
{ title: 'HOME', component: HomePage, icon: 'md-home' },
{ title: 'CONTACT', component: ContactPage, icon: 'ios-chatbubbles' }
];
}
openPage(page) {
this.navCtrl.setRoot(page.component);
}
}
也试过这个变体:
private navCtrl: NavController;
constructor(navCtrl: NavController) {
this.navCtrl = navCtrl;
最后这是我的app.module:
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';
import { MyApp } from './app.component';
/* PAGES */
import { HomePage } from '../pages/home/home';
import { ContactPage } from '../pages/contact/contact';
/* COMPONENTS */
import { MenuComponent } from '../shared/components/menu/menu.component';
@NgModule({
declarations: [
MyApp,
HomePage,
ContactPage,
MenuComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
ContactPage,
MenuComponent
],
providers: [
StatusBar,
SplashScreen,
ModalUtil,
{provide: ErrorHandler, useClass: IonicErrorHandler}
]
})
export class AppModule {}
提供商:ModalUtil.ts
import { Injectable } from "@angular/core";
import { ViewController, ModalController} from 'ionic-angular';
@Injectable()
export class ModalUtil {
constructor(
private modalCtrl: ModalController,
private viewCtrl: ViewController) {
}
presentModal(page: any, params?: Object) {
let modal = this.modalCtrl.create(page.component, params);
modal.present();
}
dismissModal(): void {
this.viewCtrl.dismiss();
}
}
仍然出现错误:
大家帮忙吗??
这是离子怪癖之一。您不能在根级别注入 NavController。尝试在 app.component.ts 中注入 NavController。您会看到 similar/same 错误。我通常在 app.component.ts 中设置我的 ionic-menu。我猜它位于不同的组件上并不会改变它仍然是根级别组件的事实。
尝试:
openPage(page) {
this.content.setRoot(page.component);
}
对我有用。
我在 constructor
组件上放置任何内容时遇到错误。
我制作了我的组件 menu
这是我的 app.html:
<menu-component [content]="content"></menu-component>
<ion-nav #content [root]="rootPage"></ion-nav>
<!-- I have to maintain this line here and on the MenuComponent cause the app didn't load the content without it... Don't know why-->
这是我的菜单组件:
<ion-menu [content]="content">
<ion-content>
<ion-list>
<button menuClose ion-item *ngFor="let page of pages" (click)="openPage(page)">
<ion-icon name="{{page.icon}}"></ion-icon>
{{page.title}}
</button>
</ion-list>
</ion-content>
</ion-menu>
<ion-nav #content [root]="rootPage"></ion-nav>
<!-- See same line of app.html -->
这是我的MenuComponent.ts:
import { Component, Input } from '@angular/core';
import { NavController } from 'ionic-angular';
/* PAGES */
import { HomePage } from '../../../pages/home/home';
import { ContactPage } from '../../../pages/contact/contact';
@Component({
selector: 'menu-component',
templateUrl: 'menu.component.html'
})
export class MenuComponent {
@Input() content;
pages: Array<{ title: string, component: any, icon: string }>;
//This doesn't work
// constructor( private navCtrl: NavController ) {
//This does
constructor( ) {
this.pages = [
{ title: 'HOME', component: HomePage, icon: 'md-home' },
{ title: 'CONTACT', component: ContactPage, icon: 'ios-chatbubbles' }
];
}
openPage(page) {
this.navCtrl.setRoot(page.component);
}
}
也试过这个变体:
private navCtrl: NavController;
constructor(navCtrl: NavController) {
this.navCtrl = navCtrl;
最后这是我的app.module:
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';
import { MyApp } from './app.component';
/* PAGES */
import { HomePage } from '../pages/home/home';
import { ContactPage } from '../pages/contact/contact';
/* COMPONENTS */
import { MenuComponent } from '../shared/components/menu/menu.component';
@NgModule({
declarations: [
MyApp,
HomePage,
ContactPage,
MenuComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
ContactPage,
MenuComponent
],
providers: [
StatusBar,
SplashScreen,
ModalUtil,
{provide: ErrorHandler, useClass: IonicErrorHandler}
]
})
export class AppModule {}
提供商:ModalUtil.ts
import { Injectable } from "@angular/core";
import { ViewController, ModalController} from 'ionic-angular';
@Injectable()
export class ModalUtil {
constructor(
private modalCtrl: ModalController,
private viewCtrl: ViewController) {
}
presentModal(page: any, params?: Object) {
let modal = this.modalCtrl.create(page.component, params);
modal.present();
}
dismissModal(): void {
this.viewCtrl.dismiss();
}
}
仍然出现错误:
大家帮忙吗??
这是离子怪癖之一。您不能在根级别注入 NavController。尝试在 app.component.ts 中注入 NavController。您会看到 similar/same 错误。我通常在 app.component.ts 中设置我的 ionic-menu。我猜它位于不同的组件上并不会改变它仍然是根级别组件的事实。
尝试:
openPage(page) {
this.content.setRoot(page.component);
}
对我有用。