2014-05-02 10 views
17

Sto utilizzando un'implementazione abbastanza semplice della direttiva di impaginazione dell'interfaccia utente Bootstrap di Angular, tuttavia continuo a ricevere un errore che non riesco a capire. Ecco i frammenti rilevanti:

<ul> 
    <li ng-repeat="todo in filteredIdeas"> 
    {{todo}} 
    </li> 
</ul> 
<pagination ng-model="currentPage" total-items="totalIdeas"></pagination> 

Qui ci sono le porzioni rilevanti della mia $ portata nel controller:

// Set watch on pagination numbers 
$scope.$watch('currentPage + numPerPage', function() { 

    var begin = (($scope.currentPage - 1) * $scope.numPerPage); 
    var end = begin + $scope.numPerPage; 

    $scope.filteredIdeas = $scope.ideasData.slice(begin, end); 

}); 


// Data 
$scope.ideasData = []; 

for (var i = 0; i < 100; i++) { 
    $scope.ideasData.push('To do ' + i); 
} 

$scope.filteredIdeas = []; 
$scope.currentPage = 1; 
$scope.numPerPage = 10; 
$scope.totalIdeas = $scope.ideasData.length; 

l'impaginazione set si correttamente, ma qui è l'errore che ricevo quando si cerca di fare clic su la pagina successiva (o qualsiasi pagina, è per questo):

Error: [$compile:nonassign] Expression 'undefined' used with directive 'pagination' is non-assignable! 

Se ho capito bene, questo indica che sto usando qualcosa in modo non corretto per il legame a doppio senso? È stato in grado di replicare il bug in questo Plunkr: http://plnkr.co/edit/uyWQXPqjLiE4qmQLHkFy

Qualcuno ha qualche idea su cosa sto facendo male?

+0

Heres tuo plunkr biforcuta: http://plnkr.co/edit/BNgdbXD5YVwPKGhuIYcN?p=preview – aet

+0

Mi piace il tuo $ orologio, ma IMO questo è meglio : http://plnkr.co/edit/79yrgwiwvan3bAG5SnKx?p=preview –

risposta

65

La possibilità di utilizzare ng-model è stato introdotto nel ui-bootstrap-tpls-0.11.0.js, come spiegato nel changelog:

Both pagination and pager are now integrated with ngModelController .
* page is replaced with ng-model
* on-select-page is removed since ng-change can now be used
Before:
<pagination page="current" on-select-page="changed(page)" ...></pagination> After:
<pagination ng-model="current" ng-change="changed()" ...></pagination>

Dal momento che si sta utilizzando ui-bootstrap-tpls-0.10.0.min.js, è necessario utilizzare la vecchia sintassi - con page invece di ng-model:

<pagination page="currentPage" total-items="totalIdeas"></pagination> 
0

Solo per dare un esempio concreto:

<uib-pager total-items="totalItems" items-per-page="4" ng-model="currentPage" ng-change="pageChanged()"></uib-pager> 

e quindi legare pageChanged nel vostro campo di applicazione:

$scope.pageChanged=function(){ 
     console.log("Current page" + $scope.currentPage); 
    }; 
Problemi correlati