2014-11-21 2 views
0

У меня есть двумерный массив в контроллере:Странное поведение массива с угловыми

var MainController = function($scope) { 
    $scope.board = [[1, 2, 3, 4], 
        [5, 6, 7, 8], 
        [9, 10, 11, 12], 
        [13, 14, 15, 16]]; 
}; 

И я хочу, чтобы отобразить его в виде таблицы:

<table> 
    <tr ng-repeat="line in board"> 
     <td ng-repeat="cell in line"> 
      {{ cell }} 
     </td> 
    </tr> 
</table> 

Все прекрасно работают с этим кодом, но если я измените данные на доске, чтобы сделать две идентичные ячейки в строке (внутренний массив) - эта строка исчезнет. Поэтому, если я сменю контроллер на:

$scope.board = [[1, 2, 3, 4], 
        [5, 6, 7, 7], 
        [9, 10, 11, 12], 
        [13, 14, 15, 16]]; 

Вторая линия исчезает.

Почему и как я могу это исправить?

+1

Вы могли бы опубликовать plunkr или скриптную версию кода, чтобы мы могли поиграть с ней? – thataustin

ответ

2

Он видит идентичные значения как дубликаты. Измените вид, добавив track by синтаксис следующим

<table> 
    <tr ng-repeat="line in board track by $index"> 
     <td ng-repeat="cell in line track by $index"> 
      {{ cell }} 
     </td> 
    </tr> 
</table> 

Это

заставит элементы должны быть сконструированы их позиции в массиве вместо их значения

См Duplicate Key in Repeater

+0

Кажется, что ошибка в угловом институте. Это не дубликат ключа - это индексы массива. – Dinesh

+1

Не ошибка; это именно то, что «трек» предназначен для решения. – Blazemonger

Смежные вопросы