简体   繁体   中英

AngularJS ng-repeat-start with limitTo doesn't work

I have a list of several objects and at the beginning I want to load just some of them. I took a look at the statement ng-repeat , but I need to have a structure like this:

<table class="table table-hover table-hidden">
       <thead>
           <tr>
           ...
           </tr>
       </thead>

       <tbody>
          <tr ng-repeat-start="object in objects | filter:query | orderBy:predicate:reverse"  ng-init="isCollapsed=true">   
          ...
         </tr>
         <tr ng-repeat-end class="more">
          ...
         </tr>
      </tbody>
   </table>

I tried to apply the statement limitTo inside ng-repeat-start , in this way:

<tr ng-repeat-start="object in objects | filter:query | orderBy:predicate:reverse| limitTo: limit"  ng-init="isCollapsed=true"> 

and on controller I wrote:

 $scope.limit = 10;

    $scope.incrementLimit = function () {
        $scope.limit += 10;
    };

The function incrementLimit is called by a click on hyperlink

 <a href ng-click="incrementLimit()">more</a>

The list of objects is instantiated and filled (with all the elements) when the page loads.

With my approach at the beginnig are loaded and showed first 10 elements correctly, and when I click on "more" the variable $scope.limit is incremented, but on the page nothing happens. Anyone can explain me why?

limitTo is working fine inside ng-repeat-start

Take a look at this

 var app = angular.module('myApp', []); app.controller('Controller', function ($scope) { $scope.limit = 1; $scope.incrementLimit = function () { $scope.limit += 1; }; $scope.data = [{ title: 'Foo', text: 'Lorem' }, { title: 'Bar', text: 'Iste' }, { title: 'Jon', text: 'Fat' }, { title: 'Los', text: 'Ice' }] }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js"></script> <div ng-app='myApp' ng-controller="Controller"> <table border="2" class="table table-hover table-hidden"> <thead> <tr>...</tr> </thead> <tbody> <tr ng-repeat-start="object in data | filter:query | orderBy:predicate:reverse| limitTo: limit" ng-init="isCollapsed=true" ng-bind="object.title">...</tr> <tr ng-repeat-end class="more">...</tr> </tbody> </table> <a href="#" ng-click="incrementLimit()">more</a> </div> 

Please check the below code and fiddle it is working fine

     <body ng-controller="myController">
  <button ng-click="incrementLimit()" >increment</button> <br/>
            <table class="table table-hover table-hidden">
                <thead>
                    <tr clospan="3">
                        Head
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat-start="friend in objects|limitTo: limit"  ng-init="isCollapsed=true">
                        <td>{{friend.name}}</td>
                        <td>{{friend.phone}}</td>
                        <td>{{friend.age}}</td>
                    </tr>

                    <tr ng-repeat-end class="more">
                        <td colspan="3">Footer</td>
                    </tr>
                </tbody>
            </table>

        </table>
    </body>

js code

app = angular.module("app", []);
app.controller("myController", function($scope) {
$scope.objects =
    [{
        name: 'John',
        phone: '555-1212',
        age: 10
    }, {
        name: 'Mary',
        phone: '555-9876',
        age: 19
    }, {
        name: 'Mike',
        phone: '555-4321',
        age: 21
    }, {
        name: 'Adam',
        phone: '555-5678',
        age: 35
    }, {
        name: 'Julie',
        phone: '555-8765',
        age: 29
    }];
   $scope.limit = 2;

$scope.incrementLimit = function () {
    $scope.limit += 1;
};
});

Fiddle http://jsbin.com/hoguxexuli/1/edit

I solved my problem. Basically I put the hyperlink in a different div, so the controller and the $scope were also different. It was a stupid carelessness.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM