服务器返回一个User对象作为响应
{
name: "some_name",
age: 30
}
我将为User对象创建一个类,但是该类还具有我仅在客户端需要的其他属性
class User {
public color: string = "red"
constructor(public name: string, public age: number) {}
}
我只能在客户端使用的颜色属性。
现在,客户端和服务器的用户类型不同。
如果我想将不带color属性的User obj发送回服务器,请使用请求方法
class UserRequest {
constructor(public name: string, public age: number) {}
}
let userRequest = new UserRequest(user.name, user.age);
let userRequest = {
name: user.name,
age: user.age
}
这里我只有2处房产,如果我拥有更多,那这可行吗?
假设如果我必须发送一个User列表,则迭代所有用户对象以创建一个新对象会增加复杂性。
类型不同时最好的方法是什么?
答案 0 :(得分:0)
您可以在User
类中定义一个新函数,该函数将仅返回数据库字段,或者通过定义一个dbFields
数组(仅包含需要发送到的字段)使其更通用。服务器:
class User {
public color: string = "red";
private dbFields = ['name', 'age'];
constructor(public name: string, public age: number) {}
getUserData(){
let data = {};
for(const field of this.dbFields)
data[field]=this[field];
return data;
}
}
然后,您可以简单地调用user.getUserData()
,它将返回仅包含name
和age
的对象
您还可以通过定义Model
类使其更通用,并在其他模型中使用该函数:
class Model {
constructor(protected dbFields: string[]) {}
getDatabaseData(){
let data = {};
for(const field of this.dbFields)
data[field]=this[field];
return data;
}
}
class User extends Model {
public color: string = "red";
constructor(public name: string, public age: number) {
super(['name', 'age']);
}
}
当您要发送请求时,您致电user.getDatabaseData()
。
如果有更多字段,只需将更多值添加到dbFields
数组中。如果您有一组用户,则可以map将其存储到一组数据库数据中:
const usersData = users.map((user: User)=>user.getDatabaseData());
答案 1 :(得分:0)
this.http.post<ServerModel>({ serverModel.prop1: clientModel.prop1, serverModel.prop2: clientModel.prop2 });
如果需要在多个位置创建服务器模型,可以将其包装在一个函数中。看到您正在使用类,您可以有一个名为toServerModel的方法,但是Angular标准是对数据模型而不是对类使用接口。