2016-08-13 2 views
0

Я пытаюсь создать карту плитки для игры с использованием ng-repeat, и у меня возникают проблемы с кодом ng-repeat, ответственным за отдельные плитки в строке. Если бы это был ваниль JS, у меня не было бы никаких проблем, но это уже некоторое время подтачивало меня. I found this answer which seems really close к тому, что я ищу, но мне не удалось выяснить, как применить его к моему конкретному файлу JSON.Создание карты плитки из JSON с использованием AngularJS ng-repeat

HTML

<div class='map' ng-controller='map'> 
    <div class='map-row' ng-repeat='row in rows'> 
     <div class='map-tile' ng-repeat='row in rows'> 
      {{ row.data[$index] }} 
     </div><!-- end of .map-tile --> 
    </div><!-- end of .map-row --> 
</div><!-- end of .map --> 

Контроллер

app.controller('map', function($scope, $http) { 
    $http.get('/map.json') 
    .success(function(response) { 
     $scope.rows = response.rows; 
    }); 
}); 

JSON

{ 
    "rows": [ 
     { 
      "data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
     }, 
     { 
      "data":[1, 0, 0, 3, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] 
     }, 
     { 
      "data":[1, 0, 3, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1] 
     }, 
     { 
      "data":[1, 0, 3, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] 
     } 
} 

(усеченное для экономии места .)

Результат

enter image description here

Проблема с результатом является то, что нг-повтор инструкции итерация каждой строки неправильно - я не могу понять, что я должен положить в секунду нг-повтор на этой строке вместо «строки в строках»:

<div class='map-tile' ng-repeat='row in rows'> 

Ниже изображение выделяя элементы массива, которые обнаруживаются в выходных данных для каждой строки:

enter image description here

ответ

1

Как вы уже догадались, проблема с ng-repeat, что перебирает колонн.

Ваш HTML должен выглядеть следующим образом:

<div class='map' ng-controller='map'> 
    <div class='map-row' ng-repeat='row in rows'> 
    <div class='map-tile' ng-repeat='col in row.data track by $index'> 
     {{ col }} 
    </div><!-- end of .map-tile --> 
    </div><!-- end of .map-row --> 
</div><!-- end of .map --> 

Первые ng-repeat петли по рядам. Второй ng-repeat должен циклически пересекать массив data в каждой строке.

Надеюсь, это поможет!

+0

Спасибо! Я знал, что я думал о том, что строки массивов против Cols ошибаются, поэтому ваш ответ действительно разъясняет это. К сожалению, в отношении углового синтаксиса, когда я проверяю ваш ответ, я получаю ошибку «повторного ключа в репитере»: https://docs.angularjs.org/error/ngRepeat/dupes?p0=col%20in%20row.data&p1 = номер: 1 & р2 = 1. Поэтому я все еще охочу за правильным способом набирать это при использовании ng-repeat, но по крайней мере я визуализирую массивы правильно сейчас :) – Candlejack

+0

О да. Вы должны добавить 'track by $ index', так как массив' data' имеет повторяющиеся значения (числа). Обновлен ответ. – c05mic

+0

Спасибо, просто протестирован и отлично работает :) – Candlejack

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