【发布时间】:2017-11-15 17:15:28
【问题描述】:
我无法为我所面临的问题想出一个合适的标题。所以我会尽量详细解释问题。
我定义了一个类,比如Model.ts
export class Model{
a:ObjA;
b:ObjB;
c:ObjC;
d:string;
e:boolean;
constructor(){
this.a = new ObjA();
this.b = new ObjB();
this.c = new ObjC();
}
}
问题的子类保持简单
ObjA.ts
export class ObjA{
propA:string;
propB:ObjD;
constructor(){
this.propB = new ObjD();
}
}
ObjB.ts
export class ObjB{
propA:string;
propB:number;
}
ObjC.ts
export class ObjC{
propA:string;
propB:number;
}
现在从服务中,我得到以下 JSON
{a:{propA:"some val"},c:{propB:12},d:"blah"}
我想要的是能够将 JSON 分配给 Model 类,以便我得到这个
{a:{propA:"some val",propB:{}},b:{},c:{propB:12},d:"blah"}
使用Object.assign(new Model(),json) 给我
{a:{propA:"some val"},c:{propB:12},d:"blah"}
注意这里没有
b。而且a也不见了propB
所以我的问题是,我如何映射 json 以便如果 json 中缺少任何作为对象的属性,它只会创建一个空对象? (我愿意使用 loadash 等工具)
P.S:这里的用例是我正在编写一个 Angular2 应用程序,其中使用表单输入属性。如果我在 html (obj?.prop) 中使用 elvis 运算符,因为 obj 没有该属性,所以永远不会设置该属性的值。如果我不使用猫王,那么旧的undefined 就会被抛出。
示例表格:
...
<input [(ngModel)]="model.a.propA"/>
<input [(ngModel)]="model.a.propB"/>
<input [(ngModel)]="model.b.propA"/>
<input [(ngModel)]="model.b.propB"/>
.
.
.
...
对应的*.ts组件
class Component implements OnInit{
....
model:Model = new Model();
ngOnInit(){
getData().subscribe(res=>Object.assign(model,res));
}
}
【问题讨论】:
-
您尝试过使用
rsjx库吗?它提供了一个.map选项,用于将从后端返回的 JSON 映射到前端
标签: json angular typescript