在没有监听器的情况下以程序方式选择UI网格中的行



我想默认选择网格的所有行,我通过在onRegisterApi中添加一个数据侦听器来做到这一点,如下答案所示:

onRegisterApi : function(gridApi)
    {
      $scope.gridApi = gridApi; 
      $scope.gridApi.grid.registerDataChangeCallback(function(data)
        {
          $scope.gridApi.selection.selectRow($scope.gridOptions.data[0]);
        }, [uiGridConstants.dataChange.ROW]);
    }

工作柱塞:http://plnkr.co/edit/dzf6PZwKdZmSNvKzQeYH?p=preview

然而,我不明白为什么没有像这样的听众,它就不起作用

onRegisterApi : function(gridApi)
    {
      $scope.gridApi = gridApi; 
        _.each($scope.gridOptions.data, function(companies, index){
          $scope.gridApi.selection.selectRow($scope.gridOptions.data[index]);
      });
    }

非工作柱塞:http://plnkr.co/edit/XOliwXn2MLyH6nqO7pp4?p=preview

有人能告诉我为什么吗?

我在angular 1.5.0版本中使用了以下代码。它对我有用。

app.controller('MainCtrl', ['$scope', '$http', '$interval', 'uiGridConstants','$location', function ($scope, $http, $interval, uiGridConstants, $location) { ...............

//$interval,当我们等待网格消化数据时,我们刚刚给它

$interval( function() {$scope.gridApi.selection.selectRow($scope.gridOptions.data[0]);}, 0, 1);

它确实有效,您只需要等待网格加载,例如有一个小的超时。通过这种方式,浏览器渲染DOM并在之后执行JS,即使超时时间很短。请参阅有关超时的回答。

我更新了你的Plunkr。

setTimeout(function(){
  _.each($scope.gridOptions.data, function(companies, index){
    $scope.gridApi.selection.selectRow($scope.gridOptions.data[index]);
  });
}, 1);

最新更新