2017-06-08 8 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はあなたが彼らは、彼らが同じ配列を表すため、参照によってコピーされている別の使用=オペレータに1つの配列を割り当てるときアレイとJavaScriptであると思われます。

あなたは、以下

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

を行うことができスライス()メソッドは、(エンド含まれていない)を終了し始めるから選択された新たな配列オブジェクトに配列 の部分の浅いコピーを返します。 元の配列は変更されません。

これが役立ちます。

+0

説明ありがとうございます!少なくとも私は今、なぜこれが起こっていたのか理解しています、それは私を夢中にさせていました!しかし、あなたの解決策はうまくいかず、それでも両方の配列が更新されますか?これ以上のアイデアは? –

+0

私はこれを行う方法を見つけました。 [This guy](https://stackoverflow.com/a/21896214/4461137)にはアップボントがないアイデアがありましたが、それは私のために働いているようです。 –

関連する問題