更新$ scope值会影响它之前的使用点

时间:2013-09-07 16:15:17

标签: javascript angularjs

更新$ 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);我的新元素更新后的跟踪值。

如何保持使用的跟踪值远离更改?

1 个答案:

答案 0 :(得分: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)
        });
    }