我有一个被称为在我的范围内的方法,该方法对您通过的模型执行计算。角度正在修改范围内的方法
这导致无限循环,因为Angular正在修改原始对象,而不是方法中的本地副本。
HTML
<div ng-app="myApp">
<ul ng-controller="TodoController">
<li ng-repeat="todo in todos">{{ todo.name }} {{ doSomething(todo) }}</li>
</ul>
</div>
JS
var app = angular.module('myApp', []);
app.controller('TodoController', ['$scope', function ($scope) {
$scope.todos = [{
name: 'Todo 1',
someValue: 1
}];
$scope.doSomething = function (todo) {
console.log(todo.someValue);
todo.someValue += 1;
return todo.someValue;
};
}]);
如果你打开控制台,同时运行这一点,你会看到,它会导致一个无限循环在操作中查看这里https://jsfiddle.net/pvkpj169/ 。
如何防止在此范围内修改原始模型的Angular?我想在这里做的任何修改都是本地的方法
'VAR localVal = todo.someValue;'' localVal + = 1;'' 返回localVal;' 你的意思是创建一个本地副本? –
这是由于角度消化周期的工作原理。如果范围在一个摘要内发生另一个摘要。这继续下去,直到范围稳定。你不断添加'todo.someValue + = 1;'每个摘要,所以它将是无限的。你究竟想要做什么? – charlietfl