与新对象进行映射时,如何保留类对象的原始属性。
假设我有一个具有以下属性的类。
export class User{
public name: string;
public age: number;
public internalId: number;
}
以下是我从回调Subscribe()函数分配值的地方
this.userService.getUnratedJobNotification().subscribe(
(data)=>{
if(data && data.length > 0){
this.User = data;
}
});
现在,我从服务中收到的数据仅包含名称和年龄。不是internalId属性。
通过订阅功能分配后,我只留下了姓名和年龄。
我真的不知道这个问题是不是已经回答过,或者至少我真的不知道问什么是正确的方法。
答案 0 :(得分:2)
使用Object.assign。
this.User = Object.assign({}, this.User, data);
答案 1 :(得分:2)
您可以使用Object.assign
将所有属性从返回的对象复制到实际的User
对象中。
我建议在订阅前使用RxJS的map
运算符:
this.userService.getUnratedJobNotification().pipe(
map(data => Object.assign(new User(), data))
).subscribe((user: User) => {
this.User = user;
});
答案 2 :(得分:0)
您还可以使用lodash merge处理复杂的实体:
var object = {
'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
'a': [{ 'c': 3 }, { 'e': 5 }]
};
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
答案 3 :(得分:0)
将this.User = data;
替换为this.User = {...this.User, ...data};
this.userService.getUnratedJobNotification().subscribe(
data => {
if (data) {
this.User = { ...this.User, ...data };
}
});