Я столкнулся с странным поведением, связанным с ng-init, любая помощь будет оценена.ng-init просчитывает индекс псевдонимов после array.splice
У меня есть объект модели, который имеет свойство квартир, которое представляет собой массив плоских объектов. Каждый плоский объект имеет свойство помещений, которое представляет собой массив предметов комнаты.
Я пытаюсь показать квартиру и комнаты следующим образом;
<table ng-repeat="flat in model.flats" ng-init="flatIndex = $index">
<thead>
<tr>
<td>{{flatIndex+1}}. {{flat.name}}</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="room in flat.rooms" ng-init="roomIndex = $index">
<td>{{roomIndex+1}}. {{room.name}}</td>
</tr>
</tbody>
</table>
Если я удалить квартиру или комнату с помощью array.splice
flatIndex
и roomIndex
переменные, кажется, не правильно обновить даже хотя $index
и пользовательский интерфейс обновления правильно.
Вы можете увидеть эту проблему here в действии.
Попробуйте удалить 1-й, 2-й или 3-й квартирный или комнатный объект, нажав ссылку удаления. Удаление последнего объекта из массива на самом деле не вызывает проблемы.
Любые обходные пути также будут оценены.
** [Здесь прокладка для array.some для старых браузеров] (https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/Array/some) ** Вы можете просто использовать цикл for. – PSL
Я не знал, что переменные ng-init не просматриваются. Но я должен был догадаться, что :) спасибо за ответ. веселит. – ysf
@ysf Добро пожаловать. :). Не только это, вы также можете столкнуться с подобными проблемами при использовании фильтров. Поэтому лучше постарайтесь не полагаться на '$ index', особенно когда у вас есть идентификатор .. :) – PSL