Angular pagination not updating when bound list changes due to filtering on an input text box

前端 未结 3 1316
时光说笑
时光说笑 2021-02-06 10:34

Here\'s the scenario:

I am using an ASP.NET MVC site with Angular JS and Boostrap UI. I have a dynamic ul list populated by data fed through a controller call to Angular

3条回答
  •  [愿得一人]
    2021-02-06 11:25

    Because your pagination is a combination of chained filters, Angular has no idea that when cityName changes, it should reset currentPage to 1. You'll need to handle that yourself with your own $watch.

    You'll also want to adjust your startFrom filter to say (currentPage - 1) * pageSize, otherwise, you always start at page 2.

    Once you get that going, you'll notice that your pagination is not accurate, because it's still based on destination.length, and not the filtered sub-set of destinations. For that, you're going to need to move your filtering logic from your view to your controller like so:

    http://jsfiddle.net/jNYfd/

    HTML

    • {{deals.Location}}

    JavaScript

    var destApp = angular.module('dealsPage', ['ui.bootstrap']);
    
    destApp.controller('DestinationController', function ($scope, $http, $filter) {
        $scope.destinations = [];
        $scope.filteredDestinations = [];
    
        for (var i = 0; i < 1000; i += 1) {
            $scope.destinations.push({
                Location: 'city ' + (i + 1)
            });
        }
    
        $scope.pageSize = 10;
        $scope.maxSize = 5;
    
        $scope.$watch('cityName', function (newCityName) {
            $scope.currentPage = 1;
            $scope.filteredDestinations = $filter('filter')($scope.destinations, $scope.cityName);
            $scope.noOfPages = $scope.filteredDestinations.length / 10;
        });
    });
    
    destApp.filter('startFrom', function () {
        return function (input, start) {
            start = +start; //parse to int
            return input.slice(start);
        };
    });
    

提交回复
热议问题