单击时更改ng类(嵌套ng重复)
Changing ng-class when clicked (nested ng-repeat)
这是我的角度代码。。(描述我遇到的问题是,按钮重复的嵌套ng重复是列出的所有"作业"的行为(单击时)。。
<div class="row" ng-repeat="job in jobs">
<div class="btn-group btn-group-justified" role="group">
<div class="btn-group" role="group" ng-repeat="status in job.statuscollection">
<button type="button" class="btn btn-default" ng-class="{ 'btn-info': $index == selectedIndex }" ng-click="itemClicked($index)">{{status.name}}</button>
</div>
</div>
</div>
这是我的js代码。。
$scope.jobs = [
{
_id: new Date().toISOString(),
statuscollection: [
{ name: "Off-Site"},
{ name: "Enroute" },
{ name: "On-Site" },
]
docType: "job",
},
{
_id: new Date().toISOString(),
statuscollection: [
{ name: "Off-Site"},
{ name: "Enroute" },
{ name: "On-Site" },
]
docType: "job",
}];
这是我的ng点击功能。。
$scope.itemClicked = function ($index) {
$scope.selectedIndex = $index;
console.log($scope.jobs[$index]);
}
我有不止一个作业,我在代码中只包含了一个,以减少它的数量。但当浏览器以正确的方式生成这些数据时,单击"作业"按钮之一对每个作业都会做同样的事情。
这意味着,如果我点击一个作业的"现场"按钮,则所有作业都会重复。。我如何才能使单击作业的一个按钮只对该作业有效,而不是全部有效?
跟踪多个ngRepeats
索引的正确Angular方法是使用ngInit
创建一个局部变量,为ngRepeat
的每个实例别名$index
。通常不鼓励使用$parent
来获取其$index
位置。
在下面的例子中,我们有两个ngRepeats
,因此有两个别名索引变量:outerIndex
和innerIndex
:
<tbody ng-repeat="country in countries" ng-init="outerIndex = $index">
<tr ng-repeat="city in country.cities" ng-init="innerIndex = $index">
<td>{{city}}</td>
<td>{{country.name}}</td>
<td>({{outerIndex}}, {{innerIndex}})</td>
</tr>
</tbody>
Plunker:http://plnkr.co/edit/VA1XWWrG3pghEcWli06F
最终编辑
在对问题背后的上下文有了更多的了解之后,实际上OP在所选对象上设置isActive
属性,而不是试图跟踪和匹配索引,这更有意义。也就是说,上述方法仍然有效并且适用于跟踪多个ngRepeats
上的索引
$scope.itemClicked = function (status, job) {
if (status.isActive) {
status.isActive = false;
} else {
angular.forEach(job.statuscollection, function(status) {
status.isActive = false;
});
status.isActive = true;
}
}
更新的plunker:http://plnkr.co/edit/v70fY30PjoTXCrhOPVZB
使用$parent.$index
而不是$index
来指代外部ng重复循环(即作业循环):
<button type="button" class="btn btn-default" ng-class="{ 'btn-info': $parent.index == selectedIndex }" ng-click="itemClicked($parent.$index)">{{status.name}}</button>
$index
是内部循环的索引。
$parent.$index
是外循环的索引。
相关文章:
- 嵌套ng重复angularjs
- 将angular与嵌套ng重复使用:
- AngularJS - 嵌套的ng-重复选择/选项,获取/设置所选值
- 嵌套在 ng 重复中的拼接数组
- 如何重置嵌套ng重复
- 嵌套ng中的Angularjs单选按钮重复未选中
- 如何在同一个表中显示这两个嵌套ng重复的元素
- AngularJS - 如何从嵌套的ng-repeat将id传递给api
- 在AngularJS 1.5.x中嵌套列表并更正ng模型和ng值
- 带有动态输入的嵌套ng重复
- 使用复选框嵌套ng重复
- 多维数组的嵌套ng重复
- 更改嵌套ng重复中的$http参数
- 如何访问嵌套的表单ng包含范围/字段
- Angular 1.3+ui路由器+生成器ng poly嵌入嵌套(?)视图不起作用
- AngularJS-如何在嵌套ng重复中对已筛选的孙项求和
- 使用嵌套ng中带有单选按钮的ng模型重复不起作用
- angular js中嵌套ng include内的表单
- 验证嵌套在ng中的输入元素repeat也用于页面加载,而不仅仅用于更改
- 使用AngularJS处理嵌套ng重复.无法通过ng单击来获取按钮