<!DOCTYPE html>
<html class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width">
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script>
<script src="http://rawgit.com/esvit/ng-table/master/dist/ng-table.js"></script>
<script src="http://rawgit.com/esvit/ng-table-resizable-columns/master/ng-table-resizable-columns.src.js"></script>
<script src="http://rawgit.com/marcuswestin/store.js/master/store.min.js"></script>
<link rel="stylesheet" href="https://rawgit.com/esvit/ng-table/master/ng-table.css">
</head>
<body ng-app="main">
<h1>ngTable Resize Columns</h1>
<div ng-controller="DemoCtrl">
<table ng-table="tableParams" show-filter="true" class="table ng-table-resizable-columns ng-table-rowselected table-bordered" data-resizable-columns-id="myTable">
<thead>
<tr>
<th data-resizable-column-id="name" class="sortable" ng-class="{
'sort-asc': tableParams.isSortBy('name', 'asc'),
'sort-desc': tableParams.isSortBy('name', 'desc')
}"
ng-click="tableParams.sorting({'name' : tableParams.isSortBy('name', 'asc') ? 'desc' : 'asc'})" rowspan="2">
<div>Name</div>
</th>
<th data-resizable-column-id="age" class="text-center sortable" ng-class="{
'sort-asc': tableParams.isSortBy('age', 'asc'),
'sort-desc': tableParams.isSortBy('age', 'desc')
}"
ng-click="tableParams.sorting({'age' : tableParams.isSortBy('age', 'asc') ? 'desc' : 'asc'})">
<div>Age</div>
</th>
</tr>
</thead>
<tr ng-repeat="user in $data"
ng-click="user.$selected = !user.$selected; changeSelection(user)"
ng-class="{'active': user.$selected}">
<td data-title="'Name'" header-class="text-left" header-data-id="junk" sortable="'name'" filter="{ 'name': 'text' }">
{{user.name}}
</td>
<td data-title="'Age'" header-class="text-right" class="text-right" sortable="'age'" filter="{ 'age': 'text' }">
{{user.age}}
</td>
</tr>
</table>
<script>
var app = angular.module('main', ['ngTable', 'ngTableResizableColumns']).
controller('DemoCtrl', function ($scope, $filter, ngTableParams) {
var data = [
{name: "Moroni blah blah this is long text", age: 50},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34}
];
$scope.data = data;
$scope.tableParams = new ngTableParams({
page: 1, // show first page
count: 10, // count per page
filter: {
//name: 'M' // initial filter
},
sorting: {
//name: 'asc' // initial sorting
}
}, {
total: data.length, // length of data
getData: function ($defer, params) {
// use build-in angular filter
var filteredData = params.filter() ?
$filter('filter')(data, params.filter()) :
data;
var orderedData = params.sorting() ?
$filter('orderBy')(filteredData, params.orderBy()) :
data;
params.total(orderedData.length); // set total for recalc pagination
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
$scope.changeSelection = function(user) {
// console.info(user);
}
})
</script>
<style>
.rc-handle-container {
position: relative; }
.rc-handle {
position: absolute;
width: 7px;
cursor: ew-resize;
margin-left: -3px;
z-index: 2; }
table.rc-table-resizing {
cursor: ew-resize; }
table.rc-table-resizing thead, table.rc-table-resizing thead > th, table.rc-table-resizing thead > th > a {
cursor: ew-resize; }
</style>
</div>
</body>
</html>
Demonstration of ng-table column resizing.
Also saves resized columns to local storage.