更新$ 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);
我的新元素更新后的跟踪值。
如何保持使用的跟踪值远离更改?
答案 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)
});
}