2016-11-07 8 views
1

私はクラスが角2であり、同じjson値を持つ2つの変数が必要ですが、1つを変更する必要があり、最初のものを別のものに保つ必要があります、次のように:APIへの要求に続いて変数間のデータ結合を避ける角度2

export class Table { 
    var1: any; 
    var2: any; 
} 

、:

ajax_request().then(data => { 
    this.var1 = data; 
    this.var2 = data; 
}); 

私はthis.var2で変更を加えた場合、this.var1も変更されます。

は私が作ってるんだ、これを避けるために:

this.var1 = data; 
this.var2 = JSON.stringify(this.var1); 
this.var2 = JSON.parse(this.var2); 

しかし、私はそれがパフォーマンスフレンドリーではないと知っています。 これを行うための適切な方法は何ですか?

答えて

1

これはAngular2データバインディングとは関係ありませんが、これはJavaScriptが動作する方法です。

オブジェクトのコピーを作成して、ある参照からの変更が同じオブジェクトへの他の参照に影響を与えないようにする必要があります。

https://stackoverflow.com/a/5344074/217408

+0

感謝も参照してください。大きな(私の)間違いは、Angular 2の問題です。 –

+0

簡単に作成できます。これは、number、string、booleanのようなプリミティブな値に対して期待通りに動作しますが、オブジェクトの場合は、コンテンツではなく参照のみがコピーされます。 –

+1

はい。結局のところ、私はJSON.parse(JSON.stringify(this.var1))がこれを行うための最良の方法であることを発見しました。 –

0
this.var1 = Object.assign({}, data); 
+0

機能しません。 –

+1

このコードスニペットでは、あなたの投稿の質を向上させるための説明(本当に助けます)(// meta.stackexchange.com/q/114762)を含む質問が解決されるかもしれません。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –