javascript - 在扩展 Controller (ES6)中注入(inject)模块导致未知提供者错误

标签 javascript angularjs webpack ecmascript-6 babeljs

我有一个 Controller 类 ModalCtrl,我想创建一个子类 ModalCtrlChild extends ModalCtrl。问题是,当我尝试这样做时,我在 ModalCtrl 中注入(inject)的任何模块中遇到未知提供程序错误。

我用了this生成器来构建项目,它在幕后使用 NgInject 来注入(inject)依赖项,我怀疑那里发生了一些有趣的事情。

模态控制:

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
  }
}

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();
  }
}

错误:

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

并且 ngDialog 是绝对导入的并且可以工作。如果从 ModalCtrlChild 中删除 extends ModalCtrl,我不会收到任何错误,我的代码运行正常,但我无法获得所需的继承。任何想法表示赞赏。

编辑

在发布问题之前我已经尝试过 eenagy 的回答,这也不起作用,因为问题似乎出在子类注入(inject)中,而不是在父类注入(inject)中。

sourdoughdetzel,尝试了你的建议:

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

得到完全相同的错误:

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

我怀疑这与 babel 构建扩展类的方式有关,并且不允许 ngInject 完成它的工作。我正在尝试找到一种在这里进行手动注入(inject)的方法,这应该可以解决问题并证明这是问题所在,因为我对 babel 如何解决这个问题知之甚少。

最佳答案

我的猜测是,当您从子类的构造函数中调用“super()”时,ngInject 没有做它应该在幕后做的事情。我在四处搜索时并没有在 ngInject 上看到太多信息,但由于手动调用正在发生的构造函数,它可能会短路。

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

关于javascript - 在扩展 Controller (ES6)中注入(inject)模块导致未知提供者错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031852/

相关文章:

javascript - 如何使用 webpack 3 缩小 css 样式

php - 为动态 div 定义一个好的隐藏/取消隐藏 jQuery 函数的问题

javascript - Angularjs 别名作用域

javascript - 使用 Angular 从元素数组创建单选按钮列表

javascript - 在angularjs中突出显示html字符串内的多个文本

javascript - 定义我自己的 React 事件类型

javascript - Webpack/Babel es2015错误:未捕获语法错误:意外的 token 导入

Javascript 模式弹出窗口显示外部内容

javascript - MySQL 到列表/选择框,但有一些变化

javascript - 如何在不使用 JS 的情况下滚动到 TOC 页面上的固定位置元素之外?