Ionic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 ViewController 的提供者

Posted

技术标签:

【中文标题】Ionic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 ViewController 的提供者【英文标题】:Ionic - How to import ViewController properly? - Uncaught (in promise): Error: No provider for ViewController 【发布时间】:2018-04-03 02:05:09 【问题描述】:

我有一个Popover,我希望我的应用根据所选项目的行为有所不同。 为了实现这一点,我遵循了Ionic Doc。

 Error: Uncaught (in promise): Error: No provider for ViewController!

所以如果我将 ViewController 添加到 app.module.ts 我会收到以下错误:

Uncaught Error: Can't resolve all parameters for ViewController: (?, ?, ?)

问题:如何正确导入ViewController?

popover 组件:

import  Component  from '@angular/core';
import  ViewController  from 'ionic-angular';

@Component(
  selector: 'popover',
  templateUrl: 'popover.html'
)
export class PopoverComponent 

  popoverItemList = [name: 'Event erstellen', name: 'Event Übersicht'];

  selectedTitle: string;

  constructor(private viewCtrl: ViewController) 
    this.selectedTitle = "";
  

  setSelectedTitle(selectedItem) 
   this.selectedTitle = selectedItem;
    this.viewCtrl.dismiss(this.selectedTitle);
  


我这样称呼弹出框:

presentPopover(ev) 
   let popover = this.popoverCtrl.create(PopoverComponent, 
   );
   popover.present(
     ev: ev
   );

   popover.onDidDismiss((popoverData) => 
      if(popoverData === 'Event erstellen') 
        this.navCtrl.push(CreateEventPage, 

        );
       else if(popoverData === 'Event Übersicht') 
        this.navCtrl.push(EventlistPage, 

        );
      
    )

【问题讨论】:

你需要在stackblitz.com上模拟一下 你在使用延迟加载吗? PopoverComponent 声明了哪个模块? 您是否在您的app.module 中导入了IonicModule 【参考方案1】:
import  Component  from '@angular/core';
import  ViewController  from 'ionic-angular';

@Component(
  selector: 'popover',
  templateUrl: 'popover.html',
  providers : [ViewController] //add this line
)
export class PopoverComponent 

  popoverItemList = [name: 'Event erstellen', name: 'Event Übersicht'];

  selectedTitle: string;

  constructor(private viewCtrl: ViewController) 
    this.selectedTitle = "";
  

  setSelectedTitle(selectedItem) 
   this.selectedTitle = selectedItem;
    this.viewCtrl.dismiss(this.selectedTitle);
  


【讨论】:

不可能!!把它放在 app.module.ts 中。不是每个组件的提供者 即使你做了这个糟糕的解决方法..它如何避免Uncaught Error: Can't resolve all parameters for ViewController: (?, ?, ?)【参考方案2】:

从 '@angular/core' 导入 ViewChild ; 从 'ionic-angular' 导入 ViewController ;

不是在Construct中声明,而是在@ViewChild(ViewController)视图中声明:ViewController;

【讨论】:

以上是关于Ionic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 ViewController 的提供者的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ionic 中正确读取 JSON 文件?

在 ionic 2 中使用或导入外部 javascript 文件

如何修复 Ionic 中的“没有导出的成员 'VeiwChild'”错误

使用“导入”将 Faye 客户端包含在 Ionic 2 项目中

如何将标头添加到 ionic 4 / Apollo GraphQL App

将 Ionic Native / Cordova 插件与 Ionic (React) & Capacitor 一起使用的正确方法是啥?