AngularJS с нг-прокруткой и нг-повтором
Использование angular-ui с angular. Разметка включает в себя ng-scroll
элемент, который я работаю с извлеченными данными из службы. Я хотел бы создать ряды предметов, чтобы ng-repeat
внутри ng-scroll
, Это работает в принципе ( plunker), но AngularJS говорит, что у меня что-то не так в кодировке JSON и мне нужна помощь, чтобы выяснить, что я делаю неправильно.
Чтобы было ясно, разметка и JSON ниже работают в плункере, но не в приложении. JSON в plunker и ниже взят из тела ответа отладчика.
Разметка:
<div class="row" >
<div class="col-md-12" >
<div class="video_thumb" ng-scroll='video_list in VideoIndexScrollerSource' buffer-size='10' padding="2" >
<div class="row" ng-repeat="video in video_list">
<p>
<a ng-href="/guides/{{video._id}}" target="_self">
<img ng-src="{{video.thumb}}">
</a>
</p>
</div>
</div>
</div>
</div>
JSON:
В Rails я создаю массив массивов. Каждый элемент представляет собой хэш свойств для использования в приведенном выше коде отображения. Возвращенный JSON выглядит так:
[
[
{
"thumb": "/uploads/thumb_11167113_det.jpg",
"_id": "52264092a0eef2d029673f72"
},
{
"thumb": "/uploads/thumb_11169448_det.jpg",
"_id": "522649b7a0eea05c61388f4a"
},
{
"thumb": "/uploads/thumb_278817_det.jpg",
"_id": "522649b4a0eea05c61388be2"
},
{
"thumb": "/uploads/thumb__old_",
"_id": "522e5290e4b0889f651f13ae"
},
{
"thumb": "/uploads/thumb_269411_det.jpg",
"_id": "522649baa0eea05c613891b3"
},
{
"thumb": "/uploads/thumb__old_",
"_id": "5227d1f3a0ee91bdc636efb9"
},
{
"thumb": "/uploads/thumb_11169964_det.jpg",
"_id": "52264091a0eef2d029673e49"
}
],
[
...
],
[
...
]
]
Не уверен, почему это не работает, ng-scroll должен перебирать строки, помещая массив в video_list, ng-repeat должен захватывать каждый объект из строки и получать значения.
Ошибка:
Это ошибка AngularJS, которую я получаю, когда возвращается вышеуказанный JSON:
TypeError: Object #<Resource> has no method 'push'
at copy (http://localhost:3000/assets/angular-1.2.0/angular.js?body=1:827:33)
at new Resource (http://localhost:3000/assets/angular-1.2.0/angular-resource.js?body=1:402:21)
at http://localhost:3000/assets/angular-1.2.0/angular-resource.js?body=1:483:52
at Array.forEach (native)
at forEach (http://localhost:3000/assets/angular-1.2.0/angular.js?body=1:301:21)
at angular.module.factory.Resource.(anonymous function).$http.then.value.$resolved (http://localhost:3000/assets/angular-1.2.0/angular-resource.js?body=1:482:37)
at deferred.promise.then.wrappedCallback (http://localhost:3000/assets/angular-1.2.0/angular.js?body=1:10598:99)
at deferred.promise.then.wrappedCallback (http://localhost:3000/assets/angular-1.2.0/angular.js?body=1:10598:99)
at http://localhost:3000/assets/angular-1.2.0/angular.js?body=1:10684:40
at Scope.$get.Scope.$eval (http://localhost:3000/assets/angular-1.2.0/angular.js?body=1:11577:44) angular.js?body=1:9102
(anonymous function) angular.js?body=1:9102
$get angular.js?body=1:6707
deferred.promise.then.wrappedCallback angular.js?body=1:10601
deferred.promise.then.wrappedCallback angular.js?body=1:10598
(anonymous function) angular.js?body=1:10684
$get.Scope.$eval angular.js?body=1:11577
$get.Scope.$digest angular.js?body=1:11422
$get.Scope.$apply angular.js?body=1:11683
done angular.js?body=1:7700
completeRequest angular.js?body=1:7866
xhr.onreadystatechange angular.js?body=1:7822
2 ответа
Я должен был обернуть каждый внутренний массив в фиктивный хеш "row". Angular не любит массивы массивов, он ожидает массивы объектов. Эта разметка работает с новым JSON:
<div class="row" >
<div class="col-md-12" >
<div class="video_thumb" ng-scroll='video_list in VideoIndexScrollerSource' buffer-size='10' padding="2" >
<div class="row" ng-repeat="video in video_list.row">
<p>
<a ng-href="/guides/{{video._id}}" target="_self">
<img ng-src="{{video.thumb}}">
</a>
</p>
</div>
</div>
</div>
</div>
Я видел это при настройке Angular $resource
метод для get
когда вы получаете массив (или иначе не устанавливаете isArray:true
при получении массива).
Метод query
ожидает массив ( документы):
'query': {method: 'GET', isArray: true},
get
ожидает объект:
'get': {method: 'GET'},