Angular 2 Inheritance super() injection breaks with Webpack

标签 angular webpack typescript2.0

我有一个基类:

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-b​​rowser 是从中导入 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/

相关文章:

asp.net-mvc - 为什么我的 ASP.NET Web API 路由可以与 Postman 一起使用,但不能与 Angular Post 请求一起使用

javascript - Angular 2 - 没有提示的形式

node.js - Webpack 突然无法编译,因为 "Module not found: Error: Can' tsolve"错误

即席返回值的 typescript 返回类型

angular - 无法访问 Primeng 对话框

typescript - express app.get 函数给出 "Argument types do not match parameters"错误

angular - 测试 Angular ngmodule

angular - 浏览器中文件下载进度 : Angular 5

javascript - Vue-cli 版本 3 BETA webpack 配置

javascript - Webpack 构建但组件不渲染