Я нахожу учебники по AngularJS трудными для понимания; этот рассказывает мне о создании приложения, которое отображает телефоны. Я на шаге 5, и я подумал, что в качестве эксперимента я попытаюсь позволить пользователям указать, сколько они хотели бы показать. Вид выглядит так:
<body ng-controller="PhoneListCtrl">
<div class="container-fluid">
<div class="row-fluid">
<div class="span2">
<!--Sidebar content-->
Search: <input ng-model="query">
How Many: <input ng-model="quantity">
Sort by:
<select ng-model="orderProp">
<option value="name">Alphabetical</option>
<option value="age">Newest</option>
</select>
</div>
<div class="span10">
<!--Body content-->
<ul class="phones">
<li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
{{phone.name}}
<p>{{phone.snippet}}</p>
</li>
</ul>
</div>
</div>
</div>
</body>
Я добавил эту строку, где пользователи могут ввести, сколько результатов они хотят показать:
How Many: <input ng-model="quantity">
Вот мой контроллер:
function PhoneListCtrl($scope, $http) {
$http.get('phones/phones.json').success(function(data) {
$scope.phones = data.splice(0, 'quantity');
});
$scope.orderProp = 'age';
$scope.quantity = 5;
}
Важная строка:
$scope.phones = data.splice(0, 'quantity');
Я могу жестко ввести число, чтобы показать, сколько телефонов должно быть показано. Если я вставлю 5
, 5 будет показано. Все, что я хочу сделать, это прочитать число в этом входе из представления и поместить его в data.splice
строку. Я пробовал с и без кавычек, и ни одна из них не работает. Как мне это сделать?
источник
limitTo
но предоставить кнопку «Загрузить еще», чтобы увеличить лимит. Это должно отображаться, только если доступно больше записей.filter:query
?query
исходит отSearch: <input ng-model="query">
Немного опоздал на вечеринку, но у меня это сработало. Надеюсь, кто-то еще найдет это полезным.
источник
ng-if="$index < 6"
позволило мне показать только первые 6, сохраняя весь массив для поиска (у меня есть фильтр в сочетании с полем поиска).ng-if
в этом случае не будет отображаться элемент DOM повторителя, значение которого$index
больше, чем3
. если$index
в повторителе есть0, 1, or 2
, условиеtrue
и узлы DOM созданы.ng-if
отличается отng-hide
того, что элементы не добавляются в DOM.сохранить все ваши данные изначально
EDIT случайно поместил часы за пределы контроллера, он должен был быть внутри.
источник
Вот еще один способ ограничить ваш фильтр на HTML, например, я хочу отобразить 3 списка одновременно, чем я буду использовать limitTo: 3
источник
Это работает лучше в моем случае, если у вас есть объект или многомерный массив. Будут показаны только первые элементы, остальные будут просто игнорироваться в цикле.
Поменяй 5 на то что хочешь.
источник
Используйте фильтр limitTo для отображения ограниченного числа результатов в ng-repeat.
источник
Другой (и мне кажется, лучший) способ добиться этого - фактически перехватить данные. limitTo это хорошо, но что если вы ограничиваетесь 10, когда ваш массив на самом деле содержит тысячи?
При звонке в мой сервис я просто сделал это:
Это ограничивает то, что отправляется в представление, поэтому должно быть намного лучше для производительности, чем делать это во внешнем интерфейсе.
источник
data
около, это не более эффективно, чем использование limitTo.