我在循环中比较2个整数,循环遍历包含JSON对象的数组。 JSON对象包含ID和名称。当我点击我窗口的关闭按钮时,该窗口应该消失,其他窗口应该保留,但是如果我关闭具有最高ID的窗口,那么所有这些都会关闭,例如我关闭第五个窗口#1 -5关闭,但ID仍然较高。
ctrl.items = [{
id: 1,
name: "Number one"
},
{
id: 2,
name: "Number two"
},
{
id: 3,
name: "Number three"
}];
ctrl.removeWindow = function(toBeRemovedId) {
console.log("Called: " + toBeRemovedId);
for (var i = ctrl.items.length - 1; i >= 0; i--) {
console.log(ctrl.items[i].id + " " + toBeRemovedId);
if(ctrl.items[i].id == toBeRemovedId) {
ctrl.items.splice(ctrl.items[i], 1);
}
};
}
<div class="window show" id="item_window" ng-repeat="item in itemWindowCtrl.items">
<hgroup>
<h1>{{ item.name}}</h1>
<button class="close" ><span class="fa fa-times fa-lg" ng-click="itemWindowCtrl.removeWindow(item.id)"></span></button>
</hgroup>
<section>
<p>{{ item.id + " " + item.name }}</p>
</section>
</div>
提前感谢您提供给我的任何线索。
答案 0 :(得分:1)
数组拼接函数接受索引,而不是要删除的项,所以你应该这样做:
ctrl.items.splice(i, 1);
虽然循环有点不必要。为什么不直接通过要删除的项目而不是以递减的id顺序循环来查找匹配的ID?例如:
ng-click="itemWindowCtrl.removeWindow(item)"
然后在你的控制器/指令中:
ctrl.items.splice(ctrl.items.indexOf(item), 1);
答案 1 :(得分:0)
更改for循环以获取索引,然后只删除该索引
var index = -1;
for (var i = 0; i < ctrl.items.length; i++) {
if(ctrl.items[i].id === toBeRemovedId) {
index = i;
}
};
ctrl.items.splice(index, 1);