在扩展控制器(ES6)中注入模块会导致未知提供程序错误

cai*_*ci2 9 javascript angularjs ecmascript-6 webpack babeljs

我有一个控制器类ModalCtrl,我想创建一个子类ModalCtrlChild extends ModalCtrl.问题是,当我尝试这样做时,我在注入的任何模块中都会遇到未知的提供程序错误ModalCtrl.

我使用这个生成器来构建项目,它在后台使用NgInject来注入依赖项,我怀疑那里发生了一些有趣的事情.

ModalCtrl:

export default class ModalCtrl {
  static get UID(){
    return "ModalCtrl"
  }
  ... // all my ModalCtrl methods here

 /* @ngInject */
  constructor(ngDialog, PreoModalType, OutletService, $q, $timeout, VenueService) {
    "ngInject";
    ... // ModalCtrl constructor logic initing variables
  }
}
Run Code Online (Sandbox Code Playgroud)

ModalCtrlChild:

import ModalCtrl from '../../preoModal.controller';

export default class ModalCtrlChild  extends ModalCtrl{
  static get UID(){
    return "modalCtrlChild"
  }

  /* @ngInject */
  constructor() {
    // "ngInject";
    console.log("in super constructor");
    super();
  }
}
Run Code Online (Sandbox Code Playgroud)

错误:

Error: [$injector:modulerr] Failed to instantiate module function ModalCtrlChild() due to:
Error: [$injector:unpr] Unknown provider: ngDialog
http://errors.angularjs.org/1.5.3/$injector/unpr?p0=ngDialog
Run Code Online (Sandbox Code Playgroud)

而ngDialog是DEFINITELY进口和工作.如果extends ModalCtrl从ModalCtrlChild 删除我没有收到任何错误,我的代码运行正常,但我无法获得我需要的继承.任何想法都赞赏.

编辑

在发布问题之前我曾尝试过eenagy的答案,这也不起作用,因为问题似乎是在子类注入中,而不是在父类的注入中.

sourdoughdetzel,试过你的建议:

  1. 从ModalCtrlChild中删除了注释和依赖项
  2. 从ModalCtrl中删除了注释和依赖项,但将它们留在了子项中

得到完全相同的错误:

Error: [$injector:modulerr] Failed to instantiate module function PreoModalController_Form() due to:
Error: [$injector:unpr] Unknown provider: ngDialog
Run Code Online (Sandbox Code Playgroud)

我怀疑这与babel构建扩展类的方式有关,并且不允许ngInject做它的工作.我试图找到一种在这里进行手动注射的方法,这应该可以解决问题,并证明这是问题,因为我不太了解babel如何解决这个问题.

小智 1

我的猜测是,当您从子类的构造函数调用“super()”时,ngInject 并没有在幕后执行它应该执行的操作。在搜索时,我没有看到太多关于 ngInject 的信息,但由于正在发生的对构造函数的手动调用,它可能会被短路。

如果将依赖项放入 ModalCtrlChild 控制器并取消注释“ngInject”字符串,然后将它们传递给 super() 调用,它是否按预期工作?