0

$scope 値を更新すると、以前の使用ポイントに影響します。

addPhrase呼び出しの後sayPhrase、 $scope を更新するために使用します

function PhrasesCtrl($scope) {
    $scope.trail = [0];

    $scope.addPhrase = function() {
        $scope.phrases.push({
            trail: $scope.trail
        });
    }

    $scope.sayPhrase = function(id) {
        // id = 1
        $scope.trail.push(id);
    }
}

新しく作成されたフレーズは [0] に等しいトレイルを持ち、sayPhrase 呼び出しの後は [0, 1] になります

$scope.trail.push(id);私の新しい要素が更新された後、それはトレイル値です。

使用済みのトレイル値を変更から遠ざける方法は?

4

1 に答える 1

1

これは、JS オブジェクト (および配列) が参照によってのみ渡されるためです。を にプッシュすると、 によって参照される同じ配列への参照がプッシュされtrailます。phrases$scope.trail

$scope.trail最も簡単な解決策は、新しい配列を作成して、の参照を解除することです。

    $scope.addPhrase = function() {
        $scope.phrases.push({
            trail: $scope.trail
        });
        $scope.trail = [0]; // I assume the `0` is on purpose
    }

今は呼び出される$scope.trailたびに最初からやり直します。addPhrase()


あるいは、 の現在の内容を保持する必要がある場合はtrail、配列を新しい配列にコピーする必要があります。Angular は便利なことに、このためのメソッドを提供しています。

    $scope.addPhrase = function() {
        $scope.phrases.push({
            trail: angular.copy($scope.trail)
        });
    }
于 2013-09-07T16:18:58.817 に答える