我已经创建了与多个组件共享数据的服务。毕竟,处理结束了,我需要重设服务对象的值。所以我尝试了this.UserDetails = {};
,它清除了值并删除了嵌套对象。只需将值重置为默认分配为服务即可。
谢谢。
服务文件
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class dataService {
constructor() { }
UserDetails: any = {
key1 : '' ,
key2: {
Status: false,
Label: ''
},
key3: {
Status: false,
Label: ''
},
key4: {
Status: false,
Label: ''
},
key5: '',
key6: '',
key7: new Date(),
}
}
在组件中分配值后,看起来就像
UserDetails = {
key1 : 'value 1' ,
key2: {
Status: true,
Label: 'label 1'
},
key3: {
Status: false,
Label: 'label 2'
},
key4: {
Status: true,
Label: 'label 3'
},
key5: 'key value 1',
key6: 'key value 2',
key7: new Date(),
}
}
一旦我将数据传递到后端,然后需要将其重置为默认值服务文件
答案 0 :(得分:0)
为什么不创建UserDetails
类并用数据填充它。重置期间,只需返回该类的新实例即可。
请查看下面的演示片段,我已经使用ES6类来解释该概念,但是您可以将其扩展到Angular。
class UserDetails {
key1 = '';
key2 = {
Status: false,
Label: ''
};
key3 = {
Status: false,
Label: ''
};
key4 = {
Status: false,
Label: ''
};
key5 = '';
key6 = '';
key7 = new Date();
}
class MyService {
userDetails;
constructor(){
this.userDetails = new UserDetails();
}
populate(){
this.userDetails.key1 ="foo"
this.userDetails.key2 = {
Status: true,
Label: 'bar'
};
return this.userDetails;
}
reset(){
this.userDetails = new UserDetails();
return this.userDetails;
}
}
let service = new MyService();
console.log(service.populate());
console.log("***********Resetting************");
console.log(service.reset());
答案 1 :(得分:0)
根据我认为您想做的事情,您可以检查每个孩子的类型是否不是object
:
var UserDetails = {
key1: '',
key2: {
Status: false,
Label: ''
},
key3: {
Status: false,
Label: ''
},
key4: {
Status: false,
Label: ''
},
key5: '',
key6: '',
key7: new Date(),
};
Object.entries(UserDetails).forEach(([key, value]) => {
if (typeof value != "object") {
delete UserDetails[key];
}
});
console.log(UserDetails);
答案 2 :(得分:0)
您可以使用reduce
。将其值不是Object或它们是Date
实例的键设置为空字符串。
const input = {
key1 : '' ,
key2: {
Status: false,
Label: ''
},
key3: {
Status: false,
Label: ''
},
key4: {
Status: false,
Label: ''
},
key5: '',
key6: '',
key7: new Date(),
}
const output = Object.entries(input).reduce((accu, [key, val]) => {
if(typeof val != 'object' || input[key] instanceof Date) {
accu[key] = "";
} else {
accu[key] = val;
}
return accu;
}, {});
console.log(output)
答案 3 :(得分:0)
您可以执行Amardeep Bhowmick的建议,也可以在服务中创建一个返回相同对象的简单函数。 具有这样的功能
private getUserDetailsObject():any{
var userDetailsObject = {
key1 : '' ,
key2: {
Status: false,
Label: ''
},
key3: {
Status: false,
Label: ''
},
key4: {
Status: false,
Label: ''
},
key5: '',
key6: '',
key7: new Date(),
}
return userDetailsObject;
}
要重置对象时,您可以使用this.UserDetails = this.getUserDetailsObject();
即使是第一次初始化对象,也可以使用相同的对象。