2017-06-08 70 views
0

我在使用PrimeNG DataTable的Angular 2應用程序中遇到了一個非常奇怪的問題。可以使用[editable]"true"語法更改我的DataTable中的數據。Angular 2中的意外綁定

DataTable中的數據被稱爲= inschrijvingen。 我在做this.originalInschrijvingen = this.inschrijvingen來創建一個'複製',然後用戶可以更改數據,以便我可以在稍後階段比較更改。但由於某種原因,DataTable數據綁定到originalInschrijvingeninschrijvingen

這裏是我的代碼:

onRowSelectUser(event) { //This is a different DataTable than the editable DataTable 
    this.getGebruikerZijnInschrijvingen(res => { 
     this.createRoleID(res => { 
     let selectedIds = this.gebruikerZijnInschrijvingen.map(it => it.DefUnitID); 
     this.selectedInschrijvingen = this.inschrijvingen.filter(inv => selectedIds.indexOf(inv.ID) != -1); 
     this.originalInschrijvingen = this.selectedInschrijvingen; 
     }) 
    }) 
    } 
+2

閱讀編程中的參考文獻可能會有幫助。 https://en.wikipedia.org/wiki/Reference_(computer_science) – toskv

+0

非常感謝!我不知道它是在引用而不是「複製」。謝謝! –

+0

@Pengyy謝謝你的回覆,但我想我已經找到了答案= [鏈接](https://stackoverflow.com/a/21896214/4461137) –

回答

0

this.selectedInschrijvingen似乎是一個數組,在Javascript中當你將一個陣列到另一個使用=運營商,他們都通過引用複製,因此它們代表同一陣列。

您可以在下面做,

this.originalInschrijvingen = this.selectedInschrijvingen.slice(); 

的slice()方法返回一個數組 的一部分的淺表複製到從開始到結束(不包括端部)中選擇一個新的數組對象。 原始陣列將不會被修改。

希望這有助於!

+0

謝謝你的解釋!至少我現在明白了爲什麼會發生這種事情,這讓我發瘋了!但是你的解決方案不能工作,它仍然更新兩個陣列?還有什麼想法? –

+0

我找到了一種方法來做到這一點。 [這傢伙](https://stackoverflow.com/a/21896214/4461137)有一個想法沒有upvotes,但它似乎是爲我工作。 –