<!DOCTYPE html>
<html ng-app="myApp">

  <head>
    <title>Resize ngGrid Columns</title>
    <link rel="stylesheet" type="text/css" href="http://angular-ui.github.com/ng-grid/css/ng-grid.css" />
    <link rel="stylesheet" href="style.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
    <script type="text/javascript" src="http://angular-ui.github.com/ng-grid/lib/ng-grid.debug.js"></script>
    <script src="script.js"></script>
    <script src="resizeGridColumns.js"></script>
  </head>

  <p>Resize the window to see the number of columns change. Change point is 700 pixels.</p>

  <body ng-controller="MyCtrl">
    <div class="gridStyle"
         ng-grid="gridOptions"
         resize-grid-columns="gridColumns"
         resize-grid-columns-set="gridColumnsSet">
      Window Width: {{windowWidth}}
    </div>
  </body>

</html>
// main.js
var app = angular.module('myApp', ['ngGrid']);

app.controller('MyCtrl', function($scope) {
    $scope.myData = [{name: "DJ Lance Rock", age: 35, email:"lance@yo.com", favoriteFood:"Oranges"},
                     {name: "Muno", age: 11, email:"muno@yo.com", favoriteFood:"Bananas"},
                     {name: "Foofa", age: 10, email:"foofa@yo.com", favoriteFood:"Rice"},
                     {name: "Brobee", age: 9, email:"brobee@yo.com", favoriteFood:"Applesauce"},
                     {name: "Toodee", age: 8, email:"toodee@yo.com", favoriteFood:"Toast"},
                     {name: "Plex", age: 3, email:"plex@yo.com", favoriteFood:"Oil"}];

    $scope.gridColumnsSet = {
      //All columns (for large screen)
      allColumns: [
        {field:'name', displayName:'Name'},
        {field:'age', displayName:'Age'},
        {field:'email', displayName:'Email'},
        {field:'favoriteFood', displayName:'Favorite Food'},
      ],
      //Columns for small screen
      smallColumns: [
        {field:'name', displayName:'Name'},
        {field:'favoriteFood', displayName:'Favorite Food'},
      ]
    };

    //Default to all columns
    $scope.gridColumns = $scope.gridColumnsSet.allColumns;

    $scope.gridOptions = { 
      data: 'myData',
      columnDefs: 'gridColumns'
    };
});

.gridStyle {
    border: 1px solid rgb(0,0,212);
    width: 100%; 
    height: 300px
}
app.directive('resizeGridColumns', function ($window) {

  function resizer(scope, element, attrs) {
    var w = angular.element($window);

    scope.getWidth = function () {
      return w.width();
    };

    scope.$watch(scope.getWidth, function (newValue, oldValue) {
      scope.windowWidth = newValue;
      
      var resizeGridColumnsWidth = scope.$eval(attrs.resizeGridColumnsWidth) || 700;
      var resizeGridColumnsSet = scope.$eval(attrs.resizeGridColumnsSet);

      if(newValue < resizeGridColumnsWidth) {
        scope.gridColumns = resizeGridColumnsSet.smallColumns;
      }
      else {
        scope.gridColumns = resizeGridColumnsSet.allColumns;
      }
    }, false);

    w.bind('resize', function () {
      scope.$apply();
    });
  }

  return {
    restrict: 'A',
    scope: { gridColumns: '=resizeGridColumns' },
    link: resizer
  };

});