我想在Angular中为现有Object添加一个值,我从服务调用中获取对象,在将其保存到本地存储之前,我想保存时间戳。
我正在使用Object.assign
作为相同的
问题是用户是使用接口键入的,如果我向其添加任何属性,则说明该属性未在接口中定义,并且接口类不是由我根据Firebase用户信息编写的。我不想编辑该界面或添加它。我想动态创建一个新的属性。
与Java中的反射相似,并在Javascript中向对象添加动态值。
这就是我试过的
this.afAuth.authState.subscribe((data) => {
console.log("Here");
if (data) {
const value = Object.assign(data,{TimeStamp : new Date().getTime()}); // this assign is not working even having obj in variable dosent help
console.log("Value"+JSON.stringify(value));
localStorage.setItem("user", JSON.stringify(value));
this.user = data;
this.service.fetchData(this.user.uid).subscribe((res) => {
this.comments = res;
});
} else {
this.comments = null;
}
});
提前感谢任何帮助
答案 0 :(得分:0)
使用下面提到的作业 data.TimeStamp = new Date().getTime()
是正确的方法。
this.afAuth.authState.subscribe((data) => {
console.log("Here");
if (data) {
data.TimeStamp = new Date().getTime() // this assign is not working even having obj in variable dosent help
console.log("Value"+JSON.stringify(data));
localStorage.setItem("user", JSON.stringify(data));
this.user = data;
this.service.fetchData(this.user.uid).subscribe((res) => {
this.comments = res;
});
} else {
this.comments = null;
}
});
答案 1 :(得分:0)
您可以扩展Firebase用户界面并添加时间戳,然后使用扩展接口代替默认接口。
interface MyUser extends User {
timeStamp: any;
}
然后你可以将timeStamp添加到数据对象中,如下所示:
data.timestamp = {TimeStamp : new Date().getTime()}
console.log("data",data);
您不需要使用Object.assign,您只需直接在对象上添加键值即可。
您希望在界面中为timeStamp指定正确的类型,如果您将该值作为字符串携带,请将其设为字符串,但任何内容都是安全的起点。
确保将您的本地用户变量键入扩展接口。
public user: MyUser;
this.afAuth.authState.subscribe((data) => {
console.log("Here");
if (data) {
data.timestamp = {TimeStamp : new Date().getTime()}
console.log("data: "+JSON.stringify(data));
localStorage.setItem("user", JSON.stringify(data));
this.user = data;
this.service.fetchData(this.user.uid).subscribe((res) => {
this.comments = res;
});
} else {
this.comments = null;
}
});