微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular 9 中关于包导入范围的变化

如何解决Angular 9 中关于包导入范围的变化

我正在将大型 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 文件中缺少导入语句,即使它在 parent-dir.module.ts 文件中。当我将导入语句添加child-dir.module.ts 文件时,它解决了这个问题。

在 V8 中,import 语句的放置如上所述有效,但在 V9 中,它不再沿着目录层次结构查找 import 语句。

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

解决方法

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

解决方案是确保丢失的模块出现在相应 exports 类的 @NgModules 数组中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。