Uważam, że tutoriale AngularJS są trudne do zrozumienia; ten prowadzi mnie przez proces tworzenia aplikacji wyświetlającej telefony. Jestem na etapie 5 i pomyślałem, że w ramach eksperymentu spróbuję pozwolić użytkownikom określić, ilu chcieliby, aby ich wyświetlono. Widok wygląda następująco:
<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>
Dodałem tę linię, w której użytkownicy mogą wpisać, ile wyników chcą pokazać:
How Many: <input ng-model="quantity">
Oto mój kontroler:
function PhoneListCtrl($scope, $http) {
$http.get('phones/phones.json').success(function(data) {
$scope.phones = data.splice(0, 'quantity');
});
$scope.orderProp = 'age';
$scope.quantity = 5;
}
Ważną linią jest:
$scope.phones = data.splice(0, 'quantity');
Potrafię na stałe zakodować liczbę, aby określić, ile telefonów powinno być wyświetlanych. Jeśli wstawię 5
, pokaże się 5. Chcę tylko odczytać liczbę w tym wejściu z widoku i umieścić ją w data.splice
wierszu. Próbowałem z cytatami i bez nich, ale żadne z nich nie działa. Jak mam to zrobic?
źródło
limitTo
przycisku „wczytaj więcej”, aby zwiększyć limit. Powinien być wyświetlany tylko wtedy, gdy dostępnych jest więcej rekordów.filter:query
?query
pochodzi zSearch: <input ng-model="query">
Trochę za późno na imprezę, ale to zadziałało. Mam nadzieję, że ktoś inny uzna to za przydatne.
źródło
ng-if="$index < 6"
pozwoliło mi pokazać tylko pierwsze 6, zachowując możliwość przeszukiwania całej tablicy (mam filtr połączony z polem wyszukiwania).ng-if
w tym przypadku nie wyrenderuje elementu DOM repeatera, którego wartość$index
jest większa niż3
. jeśli$index
w repeaterze jest0, 1, or 2
, warunek jesttrue
i tworzone są węzły DOM.ng-if
różni się odng-hide
tego, że elementy nie są dodawane do DOM.początkowo przechowywać wszystkie dane
EDIT przypadkowo umieścił zegarek poza kontrolerem, w którym powinien się znajdować.
źródło
tutaj jest inny sposób na ograniczenie filtra do html, na przykład chcę wyświetlić 3 listy na raz niż użyję limitTo: 3
źródło
Działa to lepiej w moim przypadku, jeśli masz obiekt lub tablicę wielowymiarową. Pokaże tylko pierwsze elementy, inne będą po prostu ignorowane w pętli.
Zmień 5 na to, co chcesz.
źródło
Użyj filtra limitTo, aby wyświetlić ograniczoną liczbę wyników w ng-repeat.
źródło
Innym (i myślę, że lepszym) sposobem osiągnięcia tego jest faktyczne przechwycenie danych. LimitTo jest w porządku, ale co, jeśli ograniczasz do 10, gdy twoja tablica faktycznie zawiera tysiące?
Dzwoniąc do mojego serwisu, po prostu zrobiłem to:
Ogranicza to to, co jest wysyłane do widoku, więc powinno być znacznie lepsze dla wydajności niż robienie tego na froncie.
źródło
data
around, nie jest to bardziej wydajne niż użycie limitTo.