angular - Angular 6 循环依赖
问题描述
我在 Angular 6 应用程序中遇到以下错误。实际上已经很久了,我正在尝试将旧的 Angular 4 应用程序升级到 Angular 6。
WARNING in Circular dependency detected:
src/app/resources/index.ts ->
src/app/resources/models/filters/sowSearch.model.ts ->
src/app/shared/services/index.ts ->
src/app/shared/services/rest/http.interceptor.ts ->
src/app/resources/index.ts
请告知有什么问题或需要更多信息。
解决方案
您的导入存在一些问题。要理解这个错误:
假设有两个文件a.ts 和 b.ts
a.ts
import { b } from './b';
export function a() {
console.log('function: a');
}
b();
b.ts
import { a } from './a';
export function b() {
a();
console.log('function: b');
}
在这里我们可以看到文件a.ts依赖于b.ts并且文件b.ts依赖于a.ts,所以它创建了一个循环来首先加载哪个文件!
这是一个非常简单的例子,但是在复杂的文件结构中它可能是一个很长的周期!
以上问题可以通过多种方式解决:
- 只需将上述任何功能移动到同一个文件,从而避免导入问题
- 将a.ts中的函数调用逻辑分离到一个新文件c.ts并在那里导入两个函数等。
也可能有更多的解决方案。
通常人们做什么,将所有组件文件导入index file
该目录并从那里重新导出,这就是问题开始的地方。
您的问题是这种情况的完美示例,为避免此类问题,您应该直接从该原始文件而不是从该原始文件导入依赖项index file
以避免循环。
问题可能仍然存在,要进一步解决它,找出常见的依赖关系并将其带到单独的文件中,然后将其导入所有依赖文件。
推荐阅读
- html - 如何使用 excel vba 从网站中提取特定数据(名称、详细信息)到 excel 中?
- php - 显示适用于 java 目录中单个页面的所有类别/术语
- powershell - 如何提取进程(对象)的 CPU 百分比值?
- java - Inflate Exception Binary XML file line # Error inflating class TextView
- dask - Dask 客户端从 S3 加载的内存不足
- maven - TeamCity 错误消息“-Dmaven.multiModuleProjectDirectory 系统属性未设置”
- c++ - 严格的别名是否会阻止您通过不同的类型写入 char 数组?
- android - 某些片段中的 NavigationDrawer
- c# - 如何使用同一列中的多个 where 编写 IQueryable?
- c# - 使用 Open XML SDK 操作 Wrod 如何将光标移动到特定段落