javascript - 升级到 Angular v9 并启用 Ivy 后,Angular 编译失败

标签 javascript angular typescript angular-ivy angular9

我们最近将 Angular 应用程序升级到了最新版本的 Angular(Angular v9)。
我们所有的依赖项也都升级了,“ng update”表示我们所有的依赖项都是“有序的”。

当我们在启用 Ivy 的情况下构建应用程序时,编译过程会失败并出现大量错误,这是我们以前从未遇到过的:

 "angularCompilerOptions": {
    "enableIvy": true
  }

有些错误很奇怪,说你不能绑定(bind)'ngClass'或'ngModel',因为它不是'div'的已知属性。它似乎缺少一些主要模块。

例如:
src/app/register/register.component.html:34:48 - error NG8002: Can't bind to 'ngClass' since it isn't a known property of 'div'.

<div class="form-group has-feedback" [ngClass]="{ 'has-error': f.submitted && !fname.valid }">
                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/app/modals/modal-recommendations/modal-recommendations.component.html:12:25 - error NG8002: Can't bind to 'ngClass' since it isn't a known property of 'div'.
<div class="modal-body" [ngClass]="{'text-center': recommendationNotVisible()}">
12 <div class="modal-body" [ngClass]="{'text-center': recommendationNotVisible()}">

src/app/dashboard/dashboard.component.html:53:17 - error NG8002: Can't bind to 'accountId' since it isn't a known property of 'app-metric-box'.
53                 [accountId]="accountId"

或者它无法识别某些组件,例如:
src/app/export/export-base/export-base.component.html:2:5 - error NG8001: 'router-outlet' is not a known element:
1. If 'router-outlet' is an Angular component, then verify that it is part of this module.
2. If 'router-outlet' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.

2     <router-outlet></router-outlet>

错误主要有两种:
  • 无法绑定(bind)到 [some-property],因为它不是 [some-element] 的已知属性。属性可以是 Angular 属性(ngClass,ngModel)或我们组件上的自定义属性。
  • [some-component] 不是已知元素(同样,我们的自定义组件和 Angular 组件都会出现这种情况)

  • 如果我们禁用“Ivy”,一切正常,代码编译并运行顺利。

    我们想开始使用 Ivy,所以我们正在寻找关于这些错误的解释以及如何修复它们。

    谢谢!

    最佳答案

    您需要添加 CUSTOM_ELEMENTS_SCHEMA 架构 模块中的数组

    import { NgModule, CUSTOM_ELEMENTS_SCHEMA }  from '@angular/core';
    
    @NgModule({
        ...
        schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
    })
    export class AppModule { }
    

    关于javascript - 升级到 Angular v9 并启用 Ivy 后,Angular 编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59931739/

    相关文章:

    javascript - Formik 验证 isSubmitting/isValidating 未设置为 true

    html - React - Material 用户界面 : How to remove scrollbar from table

    javascript - 将 Jest 升级到 v28 - 找不到错误测试环境 jest-environment-jsdom

    javascript - 获取下一个同级父节点的子节点不工作 Javascript DOM

    javascript - 如何在用户登录后更改div

    Javascript 传播运算符替代

    angularjs - 通过服务进行 Angular 2 组件交互

    typescript - 访问 Vue 中的任意插槽

    javascript - 有人有将 Visualize.js 嵌入 APEX 应用程序以集成 JasperServer Reports 的经验吗?

    angular - 如何使用 RxJS 调整重试超时时间?