【问题标题】:Getting the error "No provider for NavController" when trying to pass data from child component to parent component尝试将数据从子组件传递到父组件时出现错误“NavController 没有提供程序”
【发布时间】:2018-01-02 21:35:31
【问题描述】:

我正在尝试使用 EventEmitter 和输出将数据从我的 home.ts 文件发送到 app.component.ts 文件。但是每次我在 app.html 中引用主页组件时,都会出现这个看似随机的错误。当我从 home.ts 的构造函数中删除 NavController 时,错误消失了。

home.ts:

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

     @Component({
     selector: 'page-home',
     templateUrl: 'home.html',
     })

     export class HomePage {
     message : any;
     @Output() notify : EventEmitter<Object> = new EventEmitter<Object>();

    constructor(public navCtrl: NavController) {

    }
    ionViewDidLoad(){
    this.message = {"Name":"Sid", "Age":17};
    this.notify.emit(this.message);
   }
 }

app.html:

  <ion-nav [root]="rootPage"></ion-nav>
  <page-home (notify)="getChildData($event)"></page-home>

app.component.ts :

  import { Component, ViewChild, ViewChildren } from '@angular/core';
  import { Platform } from 'ionic-angular';
  import { StatusBar } from '@ionic-native/status-bar';
  import { SplashScreen } from '@ionic-native/splash-screen';

 import { HomePage } from '../pages/home/home';
 @Component({
  templateUrl: 'app.html'
 })
 export class MyApp {
 rootPage:any = HomePage;

 constructor(platform: Platform, statusBar: StatusBar, splashScreen: 
 SplashScreen) {
  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();
  splashScreen.hide();

  });

 }
 getChildData(message){
   console.log(message["Name"]);
   console.log(message["Age"]);

 }
}

如何解决此错误?我需要使用 NavController 所以我不能删除它。我希望仍然能够将数据从子组件发送到父组件

【问题讨论】:

标签: html angular typescript ionic2


【解决方案1】:

错误指出您应该在提供程序部分的某处提供 NavController。此部分可能位于应用程序的多个模块中,但一般的模块是 app.module.ts 文件。

您有一个提供程序部分,您可以在其中提供服务或提供程序以使 Angular 依赖注入机制正常工作。

所以我的第一个想法是在 app.module.ts 文件的 providers 部分添加 navController。这确保了 Angular 可以解析对 NavController 的依赖。将它放在 app.module.ts 文件中,使它在您的应用程序中拥有与您的导航控制器相同的实例。

@NgModule({
    bootstrap: [ AppComponent ],
    declarations: [
        ...
    ],
    imports: [ 
        ...
    ],
    exports: [
    ],
    providers: [ 
    ...
        NavController
    ]
})

但是,由于您使用的是 ionic,我会在以下 url 上查看相关主题。

Ionic 2 - Runtime Error No provider for NavController

【讨论】:

  • 我确实尝试将 NavController 添加到 app.module.ts 中的 providers 数组中,但这只会引发更多错误,并且根据我从教程和一般实践中看到的内容,您不应该添加反正它在那里。问题是我不能在 home.ts 中使用 NavController,而不是 app.component.ts。我想了解为什么将数据从子组件发送到父组件会导致此错误。如果我不发送任何数据,则不会发生此错误。而且就像我之前说的,如果我不在 home.ts 构造函数中注入 NavController,那么也不会发生错误。
猜你喜欢
  • 1970-01-01
  • 2022-11-02
  • 2018-11-27
  • 1970-01-01
  • 2019-02-27
  • 2017-04-20
  • 2021-01-15
相关资源
最近更新 更多