好的,首先我想说的是我刚刚开始使用角度,所以这可能是一个非常微不足道的问题。
我们说我有js文件:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.pool=10;
$scope.array=[1,3,5]
}
和ng-repeat
<div ng-controller="MyCtrl">
<div ng-repeat="x in array" ng-init="pool=pool-x">
{{pool}}
</div>
</div>
在此示例中,变量pool
在每次迭代开始时等于10,我希望它更新,因此结果可能是9,6,1
而不是9,7,5
。如何实现
答案 0 :(得分:4)
这是一个已知的角度陷阱,问题是角度使用称为scope inheritance
的东西,这意味着ng-repeat
的每个角色都会创建一个带有属性pool
的新范围。
并且更改该属性的值只会影响内部范围,因为它是一个不同的变量。
相反,您应该将引用用于非原始值(例如Object):
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.obj = { pool: 10 };
$scope.pool = 10;
$scope.array = [1,3,5];
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
<div ng-repeat="x in array" ng-init="pool=pool-x;obj.pool=obj.pool-x;newvar=obj.pool">
{{pool}} *** {{newvar}}
</div>
</div>
&#13;
答案 1 :(得分:0)
ng-init
只会被调用一次,它是一个初始化指令,所以你可以试试这个,我没有测试但是应该可以工作:
// In you controller
$scope.changePool = function(val) {
$scope.pool -= val;
}
<div ng-repeat="x in array; changePool(x)">
{{pool}}
</div>
<!-- or this -->
<div ng-repeat="x in array">
{{changePool(x)}}
</div>