2016-04-25 3 views
1

Ich habe Seite mit ng-repeat. Etwas wie:Ng-Repeat fügt neue Elemente zum Ende

<div class="full-row" ng-repeat="row in pendingRequests | partition:3 track by $index"> 
         <div class="one-third" ng-repeat="request in row track by request.id" ng-mouseenter="EnterRequest(request)" ng-mouseleave="LeaveRequest(request)"> 
         ... 

Jede Minute gibt es neue Anforderung an den Server für die neue Kollektion von pendingRequests. Wenn nach 1 Minute Server-Rückgabe neue Sammlung von pendingRequests neues Element wird am Ende ng-repeat Block hinzugefügt, auch wenn dieses neue Element zuerst in der Sammlung ist, die vom Server zurückgegeben wird.

Wie kann ich das neue/hinzugefügte Element zuerst in ng-repeat blockieren lassen? Ähnliche Fragen, die ich gefunden habe, ist über unshift Element zur Sammlung. Aber ich habe eine Sammlung, die vom Server kommt, also füge ich keine neuen Elemente manuell hinzu.


2 @Toxantron:

Mögliche, mein Problem ist, weil ich 2 ng-repeat haben und nur in den letzten Repeater verwende ich orderby

<div class="full-row" ng-repeat="row in pendingRequests | partition:3 track by $index"> 
          <div class="one-third" ng-repeat="request in row | orderBy: '-modificationDate' track by request.id"> 

Und es gibt auch Code von partition Filter

app.filter('partition', function() { 
    var cache = {}; 
    var filter = function(arr, size) { 
     if (!arr) { return; } 
     var newArr = []; 
     for (var i=0; i<arr.length; i+=size) { 
      newArr.push(arr.slice(i, i+size < arr.length? i+size : arr.length)); 
     } 
     var arrString = JSON.stringify(arr); 
     var fromCache = cache[arrString+size]; 
     if (JSON.stringify(fromCache) === JSON.stringify(newArr)) { 
      return fromCache; 
     } 
     cache[arrString+size] = newArr; 
     return newArr; 
    }; 
    return filter; 
}); 

Antwort

2

Ich nehme an, Sie versuchen orderBy: '-id'.

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.requests = [ 
 
    { id: 1, name: "Request 1"}, 
 
    { id: 2, name: "Request 2"}, 
 
    { id: 3, name: "Request 3"}, 
 
    { id: 4, name: "Request 4"}, 
 
    { id: 5, name: "Request 5"}, 
 
    { id: 6, name: "Request 6"} 
 
    ]; 
 
}); 
 
app.filter('partition', function() { 
 
    var cache = {}; 
 
    var filter = function(arr, size) { 
 
     if (!arr) { return; } 
 
     var newArr = []; 
 
     for (var i=0; i<arr.length; i+=size) { 
 
      newArr.push(arr.slice(i, i+size < arr.length? i+size : arr.length)); 
 
     } 
 
     return newArr; 
 
    }; 
 
    return filter; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    <ol> 
 
    <li ng-repeat="requestRow in requests | orderBy: '-id'|partition: 3"> 
 
     <ol> 
 
     <li ng-repeat="request in requestRow" > 
 
      {{ request.name }} 
 
     </li> 
 
     </ol> 
 
    </li> 
 
    </ol> 
 
</div>

+0

Dank für das Antwort-. Das macht Sinn, aber in meinem Fall funktioniert das nicht ... Neues Element ist immer am Ende – demo

+0

Es scheint seltsam – demo

+0

Ich brauche mehr Code oder Demo-JSON, um weiter zu helfen. – Toxantron