1

私はangularJSを使用しており、かなり初心者です。だから私はこのように見えるコントローラースコープに変数を持っています。

$scope.emptyContact = {'contact_firstname':'', 'contact_lastname':''};

newContactこれを使用して、フォームにデータを追加するために使用するjsonをリセットしたいと思います。しかし、私がこれを行うとき:

$scope.newContact = $scope.emptyContact;

変数の何かを変更すると、newContact変数にも変更されemptyContactます。データを一緒に「バインド」せずにnewContact変数に値を与える方法はありますか? emptyContactありがとう、ダニエル!

4

4 に答える 4

1

はい。オブジェクトへの参照が保持されているため、それが起こっています

a = {};     // a will be an empty object
b = a;      // b will be a (the reference is kept)
a === b     // return true
b.c = 12;   // set c key to b
a.c         // returns 12 because b is a and c is set to a, too

d = JSON.parse(JSON.stringify(a)); // clone a 
a === d                            // return false because d is not a
d.e = 13;                          // sets e key as 13
a.e                                // returns undefined because d is NOT a

そのため、私は常にobj1 = JSON.parse(JSON.stringify(obj1))オブジェクトのクローンを使用することを好みます。

コードは次のようになります。

$scope.newContact = JSON.parse(JSON.stringify($scope.emptyContact));

またはangular.copy()の使用:

angular.copy($scope.emptyContact, $scope.newContact);

...そしてあなたのemptyContact意志は変わりません。

于 2013-10-06T10:54:22.097 に答える
0

オブジェクトのクローンを作成すると、これを達成するのに役立ちます

以下のリンクをご覧ください

JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?

于 2013-10-06T10:49:14.237 に答える