我在控制器内部有一个转发器,转发器中的每个项目都有自己的状态:
<div ng-controller="...">
<div ng-repeat"...">{{status}}</div>
</div>
现在,假设我想改变这种状态,如果我在转发器中使用status = 'foo'
它就像一个魅力,重复中的每个项目都可以有自己的状态。但是,我想从控制器更改此状态,因为我想使用一些ajax调用和这样的魔术。我搜索了所有的网页,并问我的好朋友谷歌几个问题,但我找不到任何有关如何进入重复项目范围的信息。
This fiddle模拟我的问题,如果你单击其中一个按钮,它会将整个范围的状态更改为clicked
,而我想要实现的只是获取旁边的圆圈变成蓝色的按钮。 (我知道我可以在列表中添加一个值,但我有理由不这样做。)
答案 0 :(得分:4)
这是原型继承的经典案例。您可以使用this.status
设置当前范围内的状态。
在这里看我的小提琴
调用该方法时,使用此set调用它到当前范围。这是ng-repeat
直到我链接到这个谈论这个的维基页面https://github.com/angular/angular.js/wiki/Understanding-Scopes,我的回答才会完整。
答案 1 :(得分:3)
每个项目都需要拥有自己的唯一状态属性,而不是一个连接到控制器的属性,例如:
function fooCtrl($scope, $timeout){
// list is now an array of objects, each of which has an empty status property
$scope.list = [{status: null}, {status: null}, {status: null}];
$scope.setStatus = function(item, status){
// Only update the status of that one property
item.status = status;
//Simulate an ajax request
$timeout(function(){
item.status = null;
}, 1000);
}
}
查看:强>
<div ng-repeat="item in list">
<div class="circle {{item.status}}">
</div>
<button ng-click="setStatus(item, 'clicked')">click me</button>
</div>