2017-07-04 89 views
-1

我想添加一個值到Angular中的現有對象,我從服務調用中獲取對象,並在將其保存到本地存儲之前,我想保存時間戳。添加鍵和值在Angular中的現有對象動態

我使用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; 
    } 
}); 

任何幫助感謝

+2

...沒有必要使用分配對象,如果對象存在,只是將它加入對飛'data.newProperty = someValue' – Alex

+1

,而不是'的console.log(「在這裏」);'請嘗試' console.log(data);'並粘貼輸出的問題 – Dhyey

+0

你還沒有確定具體的問題...或在這裏問了一個問題 – charlietfl

回答

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; 
    } 
}); 
0

可以擴展火力地堡的用戶界面,並添加時間戳,然後用你的擴展接口,取代默認的一個。

interface MyUser extends User { 
    timeStamp: any; 
} 

然後你可以時間戳添加到數據對象是這樣的:

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; 
    } 
}); 
+0

當我這樣做,我得到編譯中的另一個錯誤 說錯誤在 C:/用戶/ c1xadmin/WebstormProjects/AngularConcepts/src /應用程序/ comment/comment.component.ts(80,16):屬性'timestamp'在類型'User'上不存在。 我認爲數據的類型是從火力類型的用戶和一些打字稿如何能夠推斷不知道 –

+0

你必須投中的數據時,以MYUSER任何建議 - 這是用戶的更廣泛範圍的情況下,所以它應該工作。我也建議在將其分配給本地this.user後,將其添加到返回的數據中。看到我上面的編輯。 –

+0

仍然是相同的錯誤錯誤什麼可能是可能的原因 C:/Users/c1xadmin/WebstormProjects/AngularConcepts/src/app/comment/comment.component.ts(85,16):屬性'時間戳'不存在on鍵入'User'。 ERROR在C:/Users/c1xadmin/WebstormProjects/AngularConcepts/src/app/comment/comment.component.ts(89,11):類型 '用戶' 是不能分配給輸入 'MYUSER'。 –

相關問題