【问题标题】:Ionic - How to import ViewController properly? - Uncaught (in promise): Error: No provider for ViewControllerIonic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 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

标签: angular typescript ionic-framework ionic2 ionic3


【解决方案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;

【讨论】:

    猜你喜欢
    • 2018-02-27
    • 2017-10-11
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2017-06-21
    • 2018-10-12
    • 2019-07-28
    相关资源
    最近更新 更多