var app = angular.module('app', ['ngTouch', 'ui.grid', 'ui.grid.expandable', 'ui.grid.selection', 'ui.grid.pinning']);

app.controller('MainCtrl', function MainCtrl($http, $log) {
  var vm = this;

  vm.gridOptions = {
    expandableRowTemplate: 'expandableRowTemplate.html',
    expandableRowHeight: 150,
    //subGridVariable will be available in subGrid scope
    expandableRowScope: {
      subGridVariable: 'subGridScopeVariable'
    }
  };

  vm.gridOptions.columnDefs = [
    { name: 'id' },
    { name: 'name'},
    { name: 'age'},
    { name: 'address.city'}
  ];

  $http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/500_complex.json')
    .then(function(response) {
      var data = response.data;

      for(i = 0; i < data.length; i++){
        data[i].subGridOptions = {
          columnDefs: [{name: 'Id', field: 'id'}, {name: 'Name', field: 'name'}],
          data: data[i].friends
        };
      }
      vm.gridOptions.data = data;
    });

    vm.gridOptions.onRegisterApi = function(gridApi){
      vm.gridApi = gridApi;
    };

    vm.expandAllRows = function() {
      vm.gridApi.expandable.expandAllRows();
    };

    vm.collapseAllRows = function() {
      vm.gridApi.expandable.collapseAllRows();
    };

    vm.toggleExpandAllBtn = function() {
      vm.gridOptions.showExpandAllButton = !vm.gridOptions.showExpandAllButton;
    };
});

app.controller('SecondCtrl', function SecondCtrl($http, $log) {
		var vm = this;

		vm.gridOptions = {
				enableRowSelection: true,
				expandableRowTemplate: 'expandableRowTemplate.html',
				expandableRowHeight: 150
		}

		vm.gridOptions.columnDefs = [
				{ name: 'id', pinnedLeft:true },
				{ name: 'name'},
				{ name: 'age'},
				{ name: 'address.city'}
		];

		$http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/500_complex.json')
				.then(function(response) {
						var data = response.data;

						for(i = 0; i < data.length; i++) {
								data[i].subGridOptions = {
										columnDefs: [{name: 'Id', field: 'id'}, {name: 'Name', field: 'name'}],
										data: data[i].friends
								};
						}
						vm.gridOptions.data = data;
				});
});

app.controller('ThirdCtrl', function ThirdCtrl($scope, $http, $log) {
		var vm = this;

		vm.gridOptions = {
				expandableRowTemplate: 'expandableRowTemplate.html',
				expandableRowHeight: 150,
				onRegisterApi: function (gridApi) {
						gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) {
								if (row.isExpanded) {
										row.entity.subGridOptions = {
												columnDefs: [
												{ name: 'name'},
												{ name: 'gender'},
												{ name: 'company'}
										]};

										$http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/100.json')
												.then(function(response) {
														row.entity.subGridOptions.data = response.data;
												});
								}
						});
				}
		};

		vm.gridOptions.columnDefs = [
				{ name: 'id', pinnedLeft:true },
				{ name: 'name'},
				{ name: 'age'},
				{ name: 'address.city'}
		];

		$http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/500_complex.json')
				.then(function(response) {
						vm.gridOptions.data = response.data;
				});
});

app.controller('FourthCtrl', function FourthCtrl($http, $log) {
		var vm = this;

		vm.gridOptions = {
				enableRowSelection: true,
				enableRowHeaderSelection: false,
				expandableRowTemplate: 'expandableRowTemplate.html',
				expandableRowHeight: 150
		};

		vm.gridOptions.columnDefs = [
				{ name: 'id', pinnedLeft:true },
				{ name: 'name'},
				{ name: 'age'},
				{ name: 'address.city'}
		];

		$http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/500_complex.json')
				.then(function(response) {
						var data = response.data;

						for(i = 0; i < data.length; i++) {
								data[i].subGridOptions = {
										columnDefs: [{name: 'Id', field: 'id'}, {name: 'Name', field: 'name'}],
										data: data[i].friends,
										disableRowExpandable : (i % 2 === 0)
								};
						}
						vm.gridOptions.data = data;
				});
});
.grid {
  width: 100%;
  height: 400px;
}
<div ui-grid="row.entity.subGridOptions" style="height:150px;"></div>
<!doctype html>
<html ng-app="app">
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.7.0/angular.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.7.0/angular-touch.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.7.0/angular-animate.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.7.0/angular-aria.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/csv.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/pdfmake.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/vfs_fonts.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/lodash.min.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/jszip.min.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/excel-builder.dist.js"></script>
    <script src="http://ui-grid.info/release/ui-grid.js"></script>
    <link rel="stylesheet" href="http://ui-grid.info/release/ui-grid.css" type="text/css">
    <link rel="stylesheet" href="main.css" type="text/css">
  </head>
  <body>
Retrieve data for subGrid when expanding
Toggle expand subGrid control
<div ng-controller="FourthCtrl as fourth">
   <div ui-grid="fourth.gridOptions" ui-grid-expandable ui-grid-selection class="grid"></div>
</div>


    <script src="app.js"></script>
  </body>
</html>