oto scenariusz:kątowa stronicowanie nie aktualizowanie po związaniu lista zmian w związku z filtrowania na polu wejściowym
Używam witryny ASP.NET MVC z Kątowymi JS i Boostrap UI. Mam dynamiczną listę ul wypełnioną danymi przesyłanymi przez wywołanie kontrolera do AngularJS, filtrując tę listę za pomocą pola wyszukiwania wejściowego. Lista jest również kontrolowana poprzez paginację (kontrola Bootstrap), którą skonfigurowałem, aby wyświetlać 10 wyników na stronie dla listy 100 przedmiotów. Ta lista jest filtrowana podczas wpisywania przez użytkownika w polu wyszukiwania, ale chciałbym, aby paginacja również się zaktualizowała, więc rozważ następujący przykład:
Lista zawiera 10 stron pozycji (100 pozycji), użytkownik wpisze trochę tekstu w polu wyszukiwania wejściowego, które filtruje listę do 20 elementów, tak aby paginacja była aktualizowana z 10 stron na dwie strony.
Sądzę, że musi być gdzieś instalacja zegarka $, być może na liście elementów po jej filtrowaniu, a następnie zaktualizować liczbę stron stronicowania, jednak jestem całkiem nowa w AngularJS, więc może ktoś mi wytłumaczy, jak to może być zrobione?
Dziękuję bardzo. Pisałem mój poniższy kod:
<div data-ng-app="dealsPage">
<input type="text" data-ng-model="cityName" />
<div data-ng-controller="DestinationController">
<ul>
<li data-ng-repeat="deals in destinations | filter: cityName |
startFrom:currentPage*pageSize | limitTo:pageSize">{{deals.Location}}</li>
</ul>
<br />
<pagination rotate="true" num-pages="noOfPages" current-page="currentPage"
max-size="maxSize" class="pagination-small" boundary-links="true"></pagination>
</div>
var destApp = angular.module('dealsPage', ['ui.bootstrap', 'uiSlider']);
destApp.controller('DestinationController', function ($scope, $http) {
$scope.destinations = {};
$scope.currentPage = 1;
$scope.pageSize = 10;
$http.get('/Deals/GetDeals').success(function (data) {
$scope.destinations = data;
$scope.noOfPages = data.length/10;
$scope.maxSize = 5;
});
});
destApp.filter('startFrom', function() {
return function (input, start) {
start = +start; //parse to int
return input.slice(start);
};
});
Dziękuję bardzo! To działało dobrze. :) Wszystko, co musiałem zrobić, to dodać ten wiersz kodu do rozwiązania: '$ scope.noOfPages = isNaN ($ scope.filteredDestinations.length/10)? 200: $ scope.filteredDestinations.length/10; ' Tak, aby na początku strony, renderowana była kontrola stronicowania interfejsu booststrap, w przeciwnym razie nie byłaby renderowana ze względu na zmienną $ scope.noOfPages mającą wartość" NaN ". – Ben
Fantastyczny, szczęśliwy, że pomogłem. Witamy w StackOverflow, btw. Powinieneś rozważyć zaakceptowanie odpowiedzi, jeśli odpowiedziała na twoje pytanie. :) – Langdon
Przepraszam za to, właśnie to zrobiłem. Jeszcze raz dziękuję! – Ben