在没有监听器的情况下以编程方式选择UI-Grid中的行

时间:2016-04-06 08:25:45

标签: angularjs angular-ui angular-ui-grid

我想默认选择网格的所有行,我设法通过在this answer中指定的onRegisterApi中添加数据监听器来实现:

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

工作plunkr: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

有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:2)

我在下面的代码中使用了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);

答案 1 :(得分:0)

它确实有效,您只需要等待网格加载,例如使用较小的超时。这样浏览器就会渲染你的DOM并在之后执行JS,即使是非常小的超时。 See this answer about timeout

updated your Plunkr

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