gpt4 book ai didi

angular - Angular 中递归对象(通过调用静态方法链接)中的循环依赖

转载 作者:太空狗 更新时间:2023-10-29 17:53:14 26 4
gpt4 key购买 nike

可以在单独的文件中创建树/递归对象并避免 Circular dependency detected如果我递归调用类中的方法,使用 Angular CLI 会发出警告?

(在 Angular 7 中测试) 我知道这是依赖注入(inject) (article) 中的一个问题,但是对于来自外部 api 或用于内部目的的数据用作构造函数的对象呢?如果无论如何这都不是好主意,您将如何解决? (我想这个“子问题”的答案是模型的改变,那么我应该如何修改我的模型?)我搜索解决方案但是 the closest question没有帮助我将相同的方法应用于我的情况。

我有 EmailsAttachments (带附件的电子邮件 - 带附件的整个 Email 也可以是附件,Attachment 是具有属性的分离对象,内容可以是 FileEmail ,但在这里,为了简单起见,假设附件总是一个 Email 或 null)。
每个类都有用于从 JSON 对象创建实例的静态方法(我从 API 获取 JSON,然后我将通过在顶部对象上调用静态 fromJson 方法来创建表示 API 值的对象实例):

文件:app/model/email.ts(部分代码)

import { Attachment } from './attachment';

export class Email {
// some attributes
public attachment?: Attachment;

public static fromJson(js: JSON): Email {
const e = new Email();
// fill some attributes here
if (js['attachment']) { e.attachment = Attachment.fromJson(js['attachment']); }
return e;
}
}

文件:app/model/attachment.ts(部分代码)

import { Email } from './email';
export class Attachment {
// some attributes
public content: Email;

public static fromJson(js: JSON): Attachment {
const a = new Attachment();
// fill some attributes here
if (js['email']) { a.content = Email.fromJson(js['email']); }
return a;
}
}

初始调用是:this.email = Email.fromJson(apiResponseForEmail);

这种情况导致在 ng build | serve 之后发出检测到循环依赖警告.如果这对你来说不是一个很好的例子,你可以想象Recipe包含 Ingredients 的食物类具有数量和温度等属性,其中一个 Recipe 的结果是另一个食谱的成分。

如果这些类在一个文件中,则不会报告任何警告。但是,将所有内容放在一个大文件中对我来说不是最佳解决方案(如果有任何其他文件)。

这是一个Stackblitz with Circular dependency demo (但在控制台中没有警告,stackblitz 显然删除了警告,您需要下载此代码并从本地主机运行才能看到警告)。

我感兴趣的是是否可以将这些类(在示例中通过静态方法在代码中递归调用)放在单独的文件(由类命名的文件)中并避免循环依赖检测消息 ?

最佳答案

摆脱循环依赖的方法之一是引入index.ts

文件:index.ts

export { Attachment } from './attachment';
export { Email } from './email';

文件:app/model/attachment.ts(部分代码)

import * as index_file from './index';
index_file.Attachment {
...
content: index_file.Email;
}

文件:app/model/email.ts(部分代码)

import * as index_file from './index';
index_file.Email {
...
attachment?: index_file.Attachment;
}

PS:请检查语法,我对语法没有信心

关于angular - Angular 中递归对象(通过调用静态方法链接)中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53167874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com