我有一个基类:
import {DomSanitizer} from '@angular/platform-browser';
export class Base {
constructor(protected sanitizer: DomSanitizer){
}
//.....lots more stuff
}
此类由以下派生类扩展:
import {DomSanitizer} from '@angular/platform-browser';
export class ChildClass extends Base{
constructor(protected sanitizer: DomSanitizer) {
super(sanitizer);
}
}
我的模块正在导入 BrowserModule
。
我正在使用 Webpack 进行编译,但在运行时出现以下错误:
未捕获的 ReferenceError:未定义 platform_browser_1 -- app.bundle.js:58139
app.bundle.js
由 webpack 输出,我可以在编译后的源代码中看到 platform_browser_1
在该 block 中确实不可用。
我不会以任何有目的的方式拆分我的应用程序。关于继承如何导致 Webpack 错误地不导入所需的类或其他东西,有什么我不知道的吗?
这绝对是 Webpack 的问题,因为如果我删除 DomSanitizer
的基于继承的 usave 并直接将其放入子组件中,它就可以正常工作。
需要说明的是,platform-browser
是从中导入 DomSanitizer
的模块。
有人知道发生了什么事吗? 感谢您的帮助。
最佳答案
好吧,基本上,我尝试了很多东西来了解如何让 Webpack 输出正确的代码。我注意到 Webpack 会与其他模块一起在转译 block 中输出一个变量:
var platform_browser_1 = ...
然而,在我的基类的 block 中,它甚至根本没有输出它。所以,我认为它忽略它一定是有原因的。由于这些 block 被注释了,我想也许向基类添加一个 @Component 注释会起作用,而且它确实起作用了。所以,我从:
导出类 Base {
....
收件人:
@Component({}) //empty component decorator
export class Base {
//....
}
无论出于何种原因,问题已解决。不幸的是,我没有解释为什么,但如果有人想要调查,那可能是因为@Component 根据我在 NG 文档站点上的研究提供了元数据。
希望这对某些人有帮助!
关于Angular 2 Inheritance super() injection breaks with Webpack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40336117/