2016-06-22 10 views
1

Ich kann nicht erzwingen, die erste Zeile nach dem angewendeten Filter auszuwählen. Also, wenn ich meine Seite bin Laden erste Zeile auszuwählen ich benutze:erste sichtbare Zeile nach Filter auswählen ui-grid

 gridApi.selection.selectRow($scope.gridOptions.data[0]); 

dies von API-Dokumentation und es ist klar. Jetzt versuche ich, die erste Zeile nach dem Filter auszuwählen. Ich habe Einfilter Funktion, die von der offiziellen Dokumentation kommt

$scope.singleFilter = function(renderableRows){ 
      var matcher = new RegExp($scope.filterValue); 
      renderableRows.forEach(function(row) { 
       var match = false; 
       [ 
       'name', 'company', 'email' 
       ].forEach(function(field){ 
        if (field.indexOf('.') !== '-1') { 
         field = field.split('.'); 
        } 
        if (row.entity.hasOwnProperty(field) && row.entity[field].match(matcher) || field.length === 2 && row.entity[field[0]][field[1]].match(matcher)){ 
         match = true; 
        } 

       }); 
       if (!match){ 
        row.visible = false; 
       } 
      }); 
      var rows = $scope.gridApi.core.getVisibleRows(); 

      var first = function(array, n) { 
        if (array == null){ 
        return void 0; 
        } 
        if (n == null) { 
        return array[0]; 
        } 
        if (n < 0) { 
        return []; 
        } 
        return array.slice(0, n); 
      }; 

      console.log(first(rows)) 
      $scope.gridApi.selection.selectRow(first(rows)); 

      return renderableRows; 
     }; 

wo ich die Länge der sichtbaren Zeilen

  var rows = $scope.gridApi.core.getVisibleRows(); 

durch einfaches Skript erhalten bekomme ich erste Reihe

 var first = function(array, n) { 
       if (array == null){ 
       return void 0; 
       } 
       if (n == null) { 
       return array[0]; 
       } 
       if (n < 0) { 
       return []; 
       } 
       return array.slice(0, n); 
     }; 
     console.log(first(rows)) 

dann bin ich versuchen, die Auswahl anzuwenden

$scope.gridApi.selection.selectRow(first(rows)); 

Aber leider kein Erfolg. Wo ist mein Fehler? Ich schätze jede Hilfe. My plunker

Antwort

3

Ich habe unten einen funktionierenden Plunker erstellt.

Der Grund, warum dies nicht funktioniert, ist, weil die sichtbaren Zeilen, die Sie erhalten, alle Zeilen sind und nicht nur die gefilterten Zeilen. Der Grund für alle Zeilen besteht darin, dass Sie sie aufrufen, bevor Sie den Filter zurückgeben. Ich habe Logik mit dem, was wir wissen, an diesem Punkt erstellt, die wird zurückgegeben werden, sobald die Funktion abgeschlossen ist.

http://plnkr.co/edit/LIcpOs7dXda5Qa6DTxFU

var filtered = []; 
for (var i = 0; i < renderableRows.length; i++) { 
    if (renderableRows[i].visible) { 
    filtered.push(renderableRows[i].entity) 
    } 
} 

if (filtered.length) { 
    $scope.gridApi.selection.selectRow(filtered[0]); 
} 
+0

whoa !, wie Magie funktioniert, vielen Dank für Ihre Beschreibung, ich schätze es! – Anton

Verwandte Themen