diff --git a/src/features/cellnav/js/cellnav.js b/src/features/cellnav/js/cellnav.js index c954ffe189..3a6caa871c 100644 --- a/src/features/cellnav/js/cellnav.js +++ b/src/features/cellnav/js/cellnav.js @@ -622,6 +622,7 @@ priority: -150, require: '^uiGrid', scope: false, + controller: function () {}, compile: function () { return { pre: function ($scope, $elm, $attrs, uiGridCtrl) { @@ -696,15 +697,17 @@ return { replace: true, priority: -99999, //this needs to run very last - require: ['^uiGrid', 'uiGridRenderContainer'], + require: ['^uiGrid', 'uiGridRenderContainer', '?^uiGridCellnav'], scope: false, compile: function () { return { - pre: function ($scope, $elm, $attrs, uiGridCtrl) { - }, post: function ($scope, $elm, $attrs, controllers) { var uiGridCtrl = controllers[0], - renderContainerCtrl = controllers[1]; + renderContainerCtrl = controllers[1], + cellNavController = controllers[2]; + + // Skip attaching cell-nav specific logic if the directive is not attached above us + if (!cellNavController) { return; } var containerId = renderContainerCtrl.containerId; @@ -765,9 +768,15 @@ return { priority: -150, // run after default uiGridCell directive and ui.grid.edit uiGridCell restrict: 'A', - require: '^uiGrid', + require: ['^uiGrid', '?^uiGridCellnav'], scope: false, - link: function ($scope, $elm, $attrs, uiGridCtrl) { + link: function ($scope, $elm, $attrs, controllers) { + var uiGridCtrl = controllers[0], + cellNavController = controllers[1]; + + // Skip attaching cell-nav specific logic if the directive is not attached above us + if (!cellNavController) { return; } + if (!$scope.col.colDef.allowCellFocus) { return; } diff --git a/src/features/cellnav/test/uiGridCellNavDirective.spec.js b/src/features/cellnav/test/uiGridCellNavDirective.spec.js new file mode 100644 index 0000000000..f7183a1968 --- /dev/null +++ b/src/features/cellnav/test/uiGridCellNavDirective.spec.js @@ -0,0 +1,26 @@ +describe('ui.grid.cellNav directive', function () { + var $scope, $compile, elm, uiGridConstants; + + beforeEach(module('ui.grid.cellNav')); + + beforeEach(inject(function (_$rootScope_, _$compile_, _uiGridConstants_) { + $scope = _$rootScope_; + $compile = _$compile_; + uiGridConstants = _uiGridConstants_; + + $scope.gridOpts = { + data: [{ name: 'Bob' }] + }; + })); + + it('should not throw exceptions when scrolling when a grid does NOT have the ui-grid-cellNav directive', function () { + elm = angular.element('
'); + + $compile(elm)($scope); + $scope.$digest(); + + expect(function () { + $scope.$broadcast(uiGridConstants.events.GRID_SCROLL, {}); + }).not.toThrow(); + }); +}); \ No newline at end of file