ng-init
을 사용할 때 알려진 동작으로 ng-init
으로 설정된 범위 속성 값은 감시되지 않고 새로 고침 된 인덱스 위치를 반영하도록 배열에서 항목을 제거하면 업데이트되지 않습니다. ng-init
을 사용하지 말고 $index
(deleteFlat($index)
) 및 flat
개체 참조 (deleteRoom(flat,$index)
보관)를 사용하십시오.
<table ng-repeat="flat in model.flats track by flat.id">
<thead>
<tr>
<td colspan="2">{{$index+1}}. {{flat.name}}</td>
<td><a href="#" ng-click="deleteFlat($index)">DELETE FLAT</a></td>
</tr>
</thead>
<tbody>
<tr ng-repeat="room in flat.rooms track by room.id">
<td> </td>
<td>{{$index+1}}. {{room.name}}</td>
<td><a href="#" ng-click="deleteRoom(flat,$index)">DELETE ROOM</a></td>
</tr>
</tbody>
</table>
및
$scope.deleteFlat = function(flatIndex){
$scope.model.flats.splice(flatIndex,1);
};
$scope.deleteRoom = function(flat,roomIndex){
flat.rooms.splice(roomIndex,1);
};
Plnkr
또는 IDS 자체 deleteFlat(flat.id)
및 deleteRoom(room.id, flat)
사용 더 낫다.
<table ng-repeat="flat in model.flats track by flat.id">
<thead>
<tr>
<td colspan="2">{{$index + 1}}. {{flat.name}}</td>
<td><a href="#" ng-click="deleteFlat(flat.id)">DELETE FLAT</a></td>
</tr>
</thead>
<tbody>
<tr ng-repeat="room in flat.rooms track by room.id">
<td> </td>
<td>{{$index+1}}. {{room.name}}</td>
<td><a href="#" ng-click="deleteRoom(room.id, flat)">DELETE ROOM</a></td>
</tr>
</tbody>
</table>
및
$scope.deleteFlat = function(flatId){
$scope.model.flats.splice(_getItemIndex(flatId, $scope.model.flats), 1);
};
$scope.deleteRoom = function(roomId, flat){
flat.rooms.splice(_getItemIndex(roomId, flat.rooms), 1);
};
function _getItemIndex(imtId, itms){
var id ;
itms.some(function(itm, idx){
return (itm.id === imtId) && (id = idx)
});
return id;
}
Plnkr2
출처
2014-09-22 13:12:51
PSL
** ([여기서 이전 브라우저 사항 Array.some위한 심이다] https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/Array/some) ** for 루프도 사용할 수 있습니다. – PSL
ng-init 변수를 보지 못했습니다. 그러나 나는 그것을 추측 했어야했다 : 대답에 감사드립니다. 건배. – ysf
@ysf 여러분 환영합니다. :). 뿐만 아니라 필터를 사용할 때도 비슷한 문제가 발생할 수 있습니다. 따라서 식별자가있을 때 특히'$ 인덱스 '에 의존하지 말고 더 잘보십시오. :) – PSL