Javascript 选择过滤器ui网格后的第一个可见行

Javascript 选择过滤器ui网格后的第一个可见行,javascript,angularjs,angular-ui-grid,Javascript,Angularjs,Angular Ui Grid,我无法强制选择应用过滤器后的第一行。因此,当我加载页面以选择我使用的第一行时: gridApi.selection.selectRow($scope.gridOptions.data[0]); 这是API文档中的内容,很清楚。 现在,我尝试选择过滤器后的第一行。 我有一个来自官方文档的singleFilter函数 $scope.singleFilter = function( renderableRows ){ var matcher = new RegEx

我无法强制选择应用过滤器后的第一行。因此,当我加载页面以选择我使用的第一行时:

      gridApi.selection.selectRow($scope.gridOptions.data[0]);
这是API文档中的内容,很清楚。 现在,我尝试选择过滤器后的第一行。 我有一个来自官方文档的singleFilter函数

 $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;
       };
通过简单的脚本,我得到第一行

       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))
但不幸的是没有成功。我的错在哪里?谢谢你的帮助。

我在下面创建了一个可用的Plunk

这不起作用的原因是,您得到的可见行是所有的行,而不仅仅是过滤的行。返回所有行的原因是,您在返回筛选器之前正在调用这些行。我已经使用我们目前所了解的内容创建了逻辑,这是函数完成后将返回的内容

var-filtered=[];
对于(var i=0;i
哇!,作品就像魔术,谢谢你的描述,我很感激!
       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));
 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]);
 }