【问题标题】:What's changed in Angular 9 with respect to package import scopeAngular 9 在包导入范围方面的变化
【发布时间】:2021-05-31 14:18:13
【问题描述】:

我正在将大型 V8 应用程序迁移到 V9,并且在使用 Material 组件的组件时遇到错误。我收到error NG8001: 'mat-icon' is not a known element。我通过将MatIconModule 的导入语句添加到包含组件定义的目录中的*.module.ts 文件来解决此问题。我遇到的问题是在此目录上方的目录中还有另一个 *.module.ts 包含此导入语句,但 V9 在搜索导入语句时似乎忽略了该文件。例如:-

+ parent-dir
    + child-dir
        component-dir
        child-dir.module.ts
    + parent-dir.module.ts

在此示例中,component-dir 中的组件出现错误,因为 child-dir.module.ts 文件中缺少 import 语句,即使它位于 parent-dir.module.ts 文件中。当我将 import 语句添加到 child-dir.module.ts 文件时,它解决了这个问题。

在 V8 中,如上所述放置 import 语句是可行的,但似乎在 V9 中,它不再向上遍历目录层次结构来查找导入语句。

这是否记录在任何地方,因为我还没有找到它,这是否会在 V10、V11 和 V12 中继续以这种方式工作?我需要了解这一点,因为我的任务是将这个 V8 应用程序一直迁移到 V12。

【问题讨论】:

  • 您是否尝试将组件目录放在导出数组中?
  • @GabrielSereno 问题不在于component-dir,而在于MatIconModule。您的建议让我更仔细地查看所有 @NgModule 类,因为大多数其他模块类导入的共享模块类导出数组中缺少 MatIconModule。

标签: angular angular9 angular-ivy


【解决方案1】:

因为这种情况在使用旧的 ViewEngine 构建时有效,所以旧的 ViewEngine 似乎存在导出更多模块的问题。而Ivy 只导出它被告知要导出的模块。对于错误发生的原因,这是一个有点简单的解释。

解决方案是确保缺少的模块出现在适当的@NgModules 类的exports 数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2011-07-14
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多