Getting angular ui grid scroll event

旧时模样 提交于 2019-12-12 03:21:52

问题


I am trying to register to the scroll event (get notified when new rows appear) like this:

 $scope.$on('ngGridEventRows', function (event, rows) {
            console.log("Scroll")
  });

But it does not fire.. (angular ui-grid version: v3.0.6)

What would be the correct way to achieve it?


回答1:


Im not sure about their native events, but you could create your own watcher for their scrolling-event.

In this Plunkr I made a watcher that broadcasts on scroll.

$scope.gridOptions.onRegisterApi = function(gridApi){
  $scope.gridApi = gridApi;
  $scope.$watch('gridApi.grid.isScrollingVertically', watchFunc);
  function watchFunc(newData) {
    if(newData === true) {
      $rootScope.$broadcast('scrolled');
    }
  }
};

And your receiver

app.controller('SecondCtrl', ['$scope', function ($scope){
  $scope.$on('scrolled', function(event, args) {
    console.log('was scrolled');
  });
}]);

Plunkr was created from their Grid Scrolling tutorial.




回答2:


If you want more exact data about the scroll (i.e. the actual scroll event), you can instead wrap the grid in a directive. I will not include a template here, since the link config is the crucial part:

angular.module('my-app').directive('myGrid', function($timeout) {
    return {
      restrict: 'E',
      template: "<div><ui-grid></ui-grid></div>",
      link: function($scope, $element, $attributes) {
        $timeout(function() {
          $('div.ui-grid-viewport').on('scroll', function() {
            // Your event handling here
          });
        });
      }
    };
  });



回答3:


$scope.$watch("gridApi.grid.isScrollingHorizontally",function(){
//your code
});


来源:https://stackoverflow.com/questions/32922659/getting-angular-ui-grid-scroll-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!