2014-10-25 3 views
1

JSON 개체가 포함 된 배열을 반복하는 루프에서 2 개의 정수를 비교합니다. JSON 객체는 ID와 이름을 포함합니다. 내 윈도우의 닫기 버튼을 클릭하면 윈도우가 사라지고 나머지는 남아 있어야하지만 무슨 일이 일어나는가는 가장 높은 ID로 윈도우를 닫으면 모두 닫히고 예를 들어 5 번째를 닫으면 # 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> 

미리 알려 주셔서 감사합니다.

답변

1

배열 스플 라이스 함수는 지수보다는 제거 할 항목을합니다, 그래서 당신은 일을해야한다 :

ctrl.items.splice(i, 1);

루핑 그래도 조금 필요하지 않습니다. 일치하는 항목을 찾으려면 ID 순서를 내림차순으로 반복하지 말고 제거 할 항목을 그냥 지나치 는게 어떨까요? 예를 들면 :

컨트롤러/지침에서 그런 ng-click="itemWindowCtrl.removeWindow(item)"

:

ctrl.items.splice(ctrl.items.indexOf(item), 1);

+0

오 권리를 제거 , 나는 그것을하는 그 방법을 완전히 잊었다. 감사! – ShadowParallax

0

변경 인덱스를 얻을 수있는 루프 후 그냥 인덱스

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);