3

ここで小さなフィドルを設定しましたhttp://jsfiddle.net/SPMfT/137/オブジェクトのプロパティを変更したり、オブジェクトを変更したりしながら、オブジェクトの変更が機能しない理由を誰かが説明してくれるかどうか疑問に思っていました「$scope」を前に付けて動作します。

その理由は、コントローラー関数でスコープを使用しないようにして、テストしやすくするためです。

私の本当の仕事は ng-click="reset(current, master)" です

$scope.reset = function (current, master) { angular.copy(current, master); }

これは機能しますが、これは機能しません:

$scope.reset = function (current, master) { angular.copy($scope.current, master); }

$scope.current と $scope.master の両方が存在します

乾杯

アップデート:

私の問題は、オブジェクト自体を更新していなかったことです。問題を解決するには、例えば

angular.extend(data, { name: 'change', game:'change' });

また

angular.copy({ name: 'change', game:'change' }, data);//Pay attention to order
4

1 に答える 1

7

その理由は、新しいオブジェクト (したがって別の参照) を作成し、以前は同じオブジェクトを指していたローカル変数に割り当てているためです。

$scope.change = function (data) {
    data = { name: 'change', game:'change' };
}

渡されたdata変数はあなたの同じオブジェクトへの参照を保持していますが、オブジェクト A の参照を指すローカル変数を新しいオブジェクト B にローカル$scope.dataに割り当てています。その時点で、は以前と同じオブジェクトへの参照を保持しています。ローカル変数への参照を変更し、関数の最後で破棄するだけです。$scope.data

特定のケースでは、動作するはずです(currentまたはを使用$scope.current)。angular.copyパラメータを本来あるべきように反転していると思います(source, destination)。簡単なデモについては、この更新されたフィドルを参照してください。

于 2013-09-04T10:12:43.040 に答える