2013-12-03 4 views
0

Я использую ng-repeat в элементе списка для отображения доступных предметов супермаркета. Элементы извлекаются с использованием $ http как JSON и хранятся в $ scope.items, а ng-repeat отлично работает, чтобы отобразить все из них. Моя проблема в том, что есть 20 из этих элементов, и я хочу ограничить число отображаемых, скажем, 3. Я пытаюсь использовать фильтр limitTo безрезультатно. Вот скриншот, показывающий отображаемые элементы, но без ограничения, несмотря на фильтр, устанавливается:AngularJS ngRepeat не соблюдает limitTo filter

http://i.imgur.com/4HiSdoG.png

Мой HTML выглядит следующим образом:

<span class="item-choices-choice pull-left"> 
    <ul> 
     <li ng-repeat="choice in items.0 | limitTo:3"> 
      <img src="{[{ choice.ImagePath }]}" class="img-rounded" /> {[{ choice.Name }]} <strong>{[{ choice.Price }]}</strong> 
     </li> 
    </ul> 
</span> 

Спасибо за любую помощь

EDIT:

Я попытаюсь объяснить еще несколько вещей: Я переписал {{{{{в AngularJS, поскольку он конфликтует с Twig иначе ,

пунктов устанавливается как массив в контроллере:

$scope.items = []; 

Вот JSON я получаю от запроса AJAX:

http://pastebin.com/ZN6ipRKQ

Это JSON получает истолковано $ HTTP и присвоенной до $ scope.items [0]. AngularJS, кажется, работает отлично в каждом случае, кроме этого.

+1

Нам нужна дополнительная информация. показать структуру 'items.0' (кстати, почему так странное имя для свойства?) –

+1

@Stewie' items.0' не оценивается JavaScript. Угловая делает оценку, и она работает. Это не мой первый выбор для структурирования/записи моего кода, но он работает: http://codepen.io/BrianGenisio/pen/uFqlm –

+0

Привет, элементы - это массив, содержащий массив из 20 вариантов в каждом элементе , items.0 - это первый элемент, который содержит соответствующие 20 вариантов, а элементы.1 будут иметь разные и т. д. –

ответ

2

Я нашел проблему.

Кажется, если вы json_encode ArrayIterator в PHP, он будет кодировать его как объект внутри объекта, а не объект в массиве. Это, по-видимому, вызывает проблемы с фильтрами limitTo (и других) в Angular, которые не работают должным образом.

После преобразования ArrayIterator в обычный массив PHP и запуска json_encode ограничение работает абсолютно нормально.

1

Ваш синтаксис интерполяции неверен. У вас есть квадратные скобки между вашими фигурными скобками.

<img src="{[{ choice.ImagePath }]}" class="img-rounded" /> {[{ choice.Name }]} <strong>{[{ choice.Price }]}</strong> 

должен стать

<img src="{{ choice.ImagePath }}" class="img-rounded" /> {{ choice.Name }} <strong>{{ choice.Price }}</strong> 

После того как я это исправить, это работает для меня в this codepen.

+0

Извините, я должен был объяснить это. Я использую Twig в качестве механизма моделирования шаблонов, и я переназначил {{{{в Angular, чтобы избежать столкновения. Элементы в противном случае отображают штраф. –

+0

Нет ничего плохого в коде, которую вы отправляли с Angular 1.2.1. Какую версию Angular вы используете? –

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