我有一個被稱爲在我的範圍內的方法,該方法對您通過的模型執行計算。角度正在修改範圍內的方法
這導致無限循環,因爲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