2017-07-20 77 views
2

我一直在試圖做一個簡單的任務,在文本框中輸入並列出相同的內容。樣本代碼如下: example.html的:ngFor with JSON object - Angular 2 ngmodel perspective

<label>Name:</label> 
<input type="text" [(ngModel)]="user.name" placeholder="Enter a name here"> 

<!-- conditionally display `yourName` --> 
<button (click)="getData(user)">Add</button> 
<hr> 
<ul> 
    <li *ngFor="let rec of record">{{rec.name}}</li> 
</ul> 

而在example.ts代碼如下:

record:any[]=[]; 
    user={"name":""}; 
    getData(username:any){ 
    this.record.push(username); 
    console.log(JSON.stringify(this.record)); 
    } 

釷問題我面對,當我插入所述第二輸入,即使在第一輸入更改爲第二,因爲兩者都指的是相同的ngModel。例如,如果我添加「GG」作爲輸入,第一條記錄將是GG。當我輸入「HH」時,首先記錄GG變爲HH,結果將爲HH和HH。請幫助我瞭解我錯誤的位置並幫助解決此問題。

+0

你可以添加完整的代碼,你如何添加更多的輸入?有https://angular.io/guide/reactive-forms描述如何添加FormGroups數組。 –

+0

@AntonM。我在輸入框中添加單個名稱。點擊添加後,它會傳遞給列表。在同一個輸入框中,我也添加了另一個輸入。 – Gayathri

回答

1

您已經正確理解問題是由具有相同參考的對象引起的。當你試圖存儲用戶的細節在簡單的對象,你可以輕鬆地通過改變克隆對象

this.record.push(username); 

TO

this.record.push(_.clone(username)); 

_.clonelodash功能,這將傳遞一個新的對象,而不是參考。

您也可以嘗試快速修復(由於性能原因,極不鼓勵);

this.record.push(JSON.parse(JSON.stringify(username))); 
+0

首先感謝您的解決方案。甚至我想到了克隆。除此之外,我想知道第二種解決方案是如何工作的。你能讓我知道嗎? – Gayathri