【发布时间】:2016-05-04 15:17:38
【问题描述】:
我有一个控制器类ModalCtrl,我想创建一个子类ModalCtrlChild extends ModalCtrl。问题是当我尝试这样做时,在ModalCtrl 中注入的任何模块中都会出现未知的提供程序错误。
我使用this 生成器构建项目,它在幕后使用 NgInject 注入依赖项,我怀疑那里发生了一些有趣的事情。
模态控件:
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 的回答,但这也不起作用,因为问题似乎出在子类注入中,而不是在父类注入中。
sourdoughdetzel,试试你的建议:
- 从 ModalCtrlChild 中移除注释和依赖项
- 从 ModalCtrl 中删除注释和依赖项,但将它们留在子项中
得到完全相同的错误:
Error: [$injector:modulerr] Failed to instantiate module function PreoModalController_Form() due to:
Error: [$injector:unpr] Unknown provider: ngDialog
我怀疑这与 babel 构建扩展类的方式有关,并且不允许 ngInject 完成它的工作。我正在尝试在这里找到一种手动注入的方法,这应该可以解决问题并证明这是问题所在,因为我对 babel 如何解决此问题了解不足。
【问题讨论】:
-
“ngDialog 绝对是导入并正常工作” 没关系。问题是它是否可以作为控制器模块中的服务使用。此外,如果
ModalCtrl的构造函数需要参数,那么当您在ModalCtrlChild的构造函数中调用super时,您必须传递这些参数。顺便说一句,错误消息看起来很奇怪。似乎您尝试将控制器实例化为模块。这段代码是什么样子的? -
@caiocpricci2 你解决了吗?
-
我已经多玩了一点,它在注入 ng-dialog 时对我来说可以正常工作...
-
@eenagy,不,我没有解决这个问题。您可以发布一个使用 nginject 的覆盖类示例的 jsfiddle 吗?
-
@caiocpricci2 使用与您相同的生成器,这是为我工作的示例:github.com/eenagy/ngInject-demo
标签: javascript angularjs webpack ecmascript-6 babeljs