Angular 中的反序列化和循环依赖
Deserialize and cyclic dependencies in Angular
我有几个 model.ts 文件。
当我使用 httpClient 时,我得到一个 JSON 对象,但它不能正常工作,因为我必须反序列化它们:.
但从那以后,我找到了帮助我反序列化所有模型的项目“class-transformer”。
我的服务有:
public method(cli: any): Observable<A> {
const formData = new FormData();
formData.append('cli', JSON.stringify(cli));
return this.http.post<A>('/my/url',
formData, {
withCredentials: true
}).pipe(first(),
map(res => {
return plainToClass(A, res);
})
);
}
对于像这样的模型:
// A.model.ts
import { Type } from 'class-transformer';
import { B } from './B.model';
export class A {
// Some properties
@Type(() => B)
b: B[]
// Some methods
}
和乙
// B.model.ts
import { Type } from 'class-transformer';
import { A } from './A.model';
export class B {
// Some properties
@Type(() => A)
a: A[]
// Some methods
}
但是,在编译时我得到了“循环依赖”并且确实存在循环依赖...
寻找解决方案我知道我可以使用 Barrel (https://github.com/typestack/class-transformer/issues/230),但它没有用。
我唯一的限制是我必须保持这种关系 -> (或非常相似的东西,因为我无法修改后端,所以我将通过 httpClient 接收数据)。
知道如何解决循环依赖吗?
最后,我使用了桶解决方案。似乎在我的其余代码中直接导入了 class A,我将它们更改为使用桶并且一切正常(我仍然有警告。但它有效)
// C.model.ts
// the problem is here
import { A } from './bla/A.model';
export class C {
}
// C.model.ts
import { A } from './bla';
export class C {
}
并且在 ./bla
我有一个 index.ts
与所有模型导出
我有几个 model.ts 文件。 当我使用 httpClient 时,我得到一个 JSON 对象,但它不能正常工作,因为我必须反序列化它们:.
但从那以后,我找到了帮助我反序列化所有模型的项目“class-transformer”。 我的服务有:
public method(cli: any): Observable<A> {
const formData = new FormData();
formData.append('cli', JSON.stringify(cli));
return this.http.post<A>('/my/url',
formData, {
withCredentials: true
}).pipe(first(),
map(res => {
return plainToClass(A, res);
})
);
}
对于像这样的模型:
// A.model.ts
import { Type } from 'class-transformer';
import { B } from './B.model';
export class A {
// Some properties
@Type(() => B)
b: B[]
// Some methods
}
和乙
// B.model.ts
import { Type } from 'class-transformer';
import { A } from './A.model';
export class B {
// Some properties
@Type(() => A)
a: A[]
// Some methods
}
但是,在编译时我得到了“循环依赖”并且确实存在循环依赖...
寻找解决方案我知道我可以使用 Barrel (https://github.com/typestack/class-transformer/issues/230),但它没有用。 我唯一的限制是我必须保持这种关系 -> (或非常相似的东西,因为我无法修改后端,所以我将通过 httpClient 接收数据)。
知道如何解决循环依赖吗?
最后,我使用了桶解决方案。似乎在我的其余代码中直接导入了 class A,我将它们更改为使用桶并且一切正常(我仍然有警告。但它有效)
// C.model.ts
// the problem is here
import { A } from './bla/A.model';
export class C {
}
// C.model.ts
import { A } from './bla';
export class C {
}
并且在 ./bla
我有一个 index.ts
与所有模型导出