http://plnkr.co/edit/7v63GXSIDon1QKm1GXCE?p=preview
我有一个array
,它存储了每个点击按钮的名称。单击后,对象将放入数组中,我使用ng-class
检查数组中对象的名称是否与用于创建按钮的模型相同。然后,如果是这样,则打开或关闭btn-info
课程。
ng-class="{'btn-info': toggleArray[k].name == m.name}"
不确定我的代码有什么问题,但是如果你按照确切的顺序点击按钮,从1到3就可以了。但是一旦你开始随机点击按钮,它就会快速中断。
控制器
.controller('ArrayCtrl', ['$scope', function($scope) {
// Init ArrayCtrl scope:
// ---------------------
var vs = $scope;
vs.message = "Add and remove objects from array:";
vs.toggleArray = [];
vs.apiArray = [{name: 'AAA'}, {name: 'BBB'}, {name: 'CCC'}];
vs.selectBtn = function(btnObj) {
var index = vs.toggleArray.indexOf(btnObj);
if (index !== -1) {
vs.toggleArray.splice(index, 1);
}
else {
vs.toggleArray.push(btnObj);
}
};
}
]);
标记
<div class="model-btns">
<ul>
<li ng-repeat="(k, m) in apiArray"
ng-click="selectBtn(m)"
class="tag-li">
<button class="btn"
ng-class="{'btn-info': toggleArray[k].name == m.name}">
{{m.name}}
</button>
</li>
</ul>
</div>
<div class="well list-delete">
<p>List to delete:</p>
<ul>
<li ng-repeat="item in toggleArray">
{{item}}
</li>
</ul>
</div>
答案 0 :(得分:3)
问题就在这里:ng-class="{'btn-info': toggleArray[k].name == m.name}"
我们说所有按钮都是&#34;关闭&#34;,因此toggleArray
是[]
。您点击第二个按钮,toggleArray
将为[ { "name": "BBB" } ]
。
但是在该按钮的ng-class表达式中,k
将为1.因此toggleArray[1]
未定义且表达式永远不为真,除非您先单击第一个项目以使toggleArray
具有2元件。
您只需更改:
ng-class="{'btn-info': toggleArray[k].name == m.name}"
为:
ng-class="{'btn-info': toggleArray.indexOf(m) > -1}"
如this plnkr所示。