2016-09-21 4 views
0

こんにちは私はAngularand関数のng-repeatについて質問をしています。 私はこのng-repeatをObjectArrayを循環させ、リセット値のボタンを持っています。私は、デフォルトのオブジェクトに渡されたオブジェクトのコピーを行う必要があります$scopeにおける機能リセットを設定し、私のControllerng-repeat関数でオブジェクト全体を変更するAngularJs

[{id:1, name:"element1"},{id:2, name : "element2"}]; 

$scope.reset = function(el){ 
    $scope.defaultObject = {id:500, name:"default"}; 
    el = angular.copy($scope.defaultObject); 
} 
data.elementsは、オブジェクトの例の配列です

<div ng-repeat="element in data.elements"> 
    <button ng-click="reset(element)" >reset</button> 
</div> 

しかし、動作しませんが、私が行う場合:

$scope.reset = function(el){ 
     $scope.defaultObject = {id:500, name:"default"}; 
     el.name = $scope.defaultObject.name; 
    } 

うまくいきます。 私は(この例では)やるときだから私はそれをしたいと思います:

el = angular.copy($scope.defaultObject); 

は、オブジェクトel$scope.defaultObject私の質問、私はすべてのプロパティをサイクリングすることなく、オブジェクト全体をコピーすることができますされたオブジェクトと等しいですか?

+0

[?どうすれば正しくJavaScriptオブジェクトのクローンを作成しない]の可能な重複(http://stackoverflow.com/質問/ 728360/how-do-i-exactly-clone-a-javascript-object) –

+0

ありがとうございますリンクを参照してください! – LorenzoBerti

+0

このリンクが表示されますが、「すべてのプロパティをサイクリングせずにオブジェクト全体をコピーできますか?」この記事では、オブジェクトのプロパティのサイクルを行い、これをオブジェクトに割り当てるようです。 – LorenzoBerti

答えて

0

オブジェクトをリセット関数に渡しているときに、このオブジェクトを上書きしています。それだけですが、data.elements配列内の元のオブジェクトには影響しないため、何も起こりません。

別の方法を使用する必要があります。そのインデックスで要素を追跡:

<div ng-repeat="element in data.elements track by index"> 
    <button ng-click="reset(index)" >reset</button> 
</div> 

...その後修正data.elements[index]

$scope.reset = function(index){ 
    $scope.data.elements[index] = {id:500, name:"default"}; 
} 
+0

ありがとう、 – LorenzoBerti

+0

私は質問が分かりません、どういう意味ですか? –

+0

私が 'reset(element);'を実行し、リセット関数で行うと 'element .name = "test" ';それは値を正確に変更します。 – LorenzoBerti

0

あなたは更新されたオブジェクトがUIに反映されていないと言っていますか?オブジェクトを割り当てた後に$scope.$apply()を実行して、スコープの更新を強制的に試すことができます。

+0

いいえ、私は$ scopeと呼ぶことはできません。ダイジェストを強制するために適用します。最後に終了しなければエラーになります。 – LorenzoBerti

関連する問題