首页 > 解决方案 > Angular 提前编译问题

问题描述

我正在尝试将我的应用程序设置为 AOT 编译以准备发布。当然,代码在 JIT 中编译得很好。

在 AOT 中,我收到很多如下所示的错误:

错误:无法绑定到“lead”,因为它不是“app-output-edit”的已知属性。1. 如果 'app-output-edit' 是一个 Angular 组件并且它有 'lead' 输入,那么验证它是这个模块的一部分。2. 如果“app-output-edit”是一个 Web 组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“@NgModule.schemas”以禁止显示此消息。3. 允许任何属性将“NO_ERRORS_SCHEMA”添加到该组件的“@NgModule.schemas”。

在我的例子中,Lead 是我的 OutputEditComponent 的公共 @Input() 属性。

我在网上找到的关于这个主题的大多数帖子都在谈论确保组件在您的组件或功能模块中声明。我没有使用功能模块。我有一个根模块(app.module.ts)和一个路由模块(app-routing.module.ts)。另外,我有一个模拟模块。我所有的组件都是根模块中的声明。

我也用其他绑定得到它。就像不能绑定到“formGroup”,因为它不是“div”的已知属性

而且我收到诸如“没有 ControlContainer 的提供者”和“没有 NgControl 的提供者”之类的错误。

最后,我遇到了第 3 方组件的错误,例如 ng-bootstrap:“无法绑定到 'items',因为它不是 ng-select 的已知属性”。哦,但它是...

更新 - 我能够解决除顶部 1 之外的所有错误:无法绑定到“X”,因为它不是“Y”的已知属性。大多数情况下,我们只是在 html 标记中遇到了错误:引用组件的私有属性、调用没有所有参数的方法等。仍在处理它。

谢谢。

标签: angularangular-aot

解决方案


因此,就我而言,事实证明我的模拟模块正在干扰一切。我们为自动化测试设置了一个模拟模块,可能是错误的,它只是坐在那里,因为我们实际上还没有进行集成测试。

当心模拟模块!它在嘲笑你的 AOT!

和平和良好的编码。

亚伦


推荐阅读