- ngTableController: add visibleColumnCount to the the current $data array (8e0b1095)
- ngTableParams: reload is never triggered once reload has failed once (4369926c)
- ngTableController: should not show filter row when all filterable columns are hidden (9ba4f473)
- pager: removed margin around buttons (7e6919ea)
- NgTableParams: support grouping on nested properties (2ec9d189)
- ngTableColumn: allow $column fields to be model bound as getter/setter's (e705fd9a)
- NgTableParams: afterCreated should be the very first event to fire (84d4220c)
- filterRow.html: header-class should also apply to filter row (eed65436)
- ngTableController: reference to $column not always available in $column getter functions (adddb27d)
- ngTableController: display the filter row by default when applicable (103b2be4)
- NgTableParams: due to 84d4220c,
The order of events firing has changed.
Previously the datasetChanged
event would fire after the afterCreated
event. Now afterCreated
event will fires first.
- filterRow.html: due to eed65436,
A css class specified using the header-class will now be added to the filter row header cell and not just the sorting row.
If you want to continue to apply the css rules only to the cell in the sorting header row you will now need to qualify your css rule with the '.header' css class.
So the following:
.my-customer-header {
/* rules */
}
... will need to change to:
.header.my-customer-header {
/* rules */
}
- ngTableController: due to adddb27d,
A context object combines and replaces the $scope
and locals
argument originally supplied to
$column
getter functions.
This context object prototypically inherits from the original $scope
and has the fields from the
original locals
argument as own properties.
It change is very unlikely to affect you
ngTableColumn.buildColumn
now expects a third parameter - a reference to the $columns
array that will contain the column being built
- NgTableParams: due to 380ba21f,
NgTableParams.settings().data
renamed toNgTableParams.settings().dataset
Previously:
var tp = new NgTableParams({}, {data: yourArray });
Now:
var tp = new NgTableParams({}, {dataset: yourArray });
- NgTableParams: thisArg for apply on $log functions should be $log (f8e0a9de)
- groupRow: should update as group changes externally (7d2965c5)
- groupRow: add expand/collapse toggle for group rows (32f208b2)
- ngTableColumnsBinding: new directive that provide access to the $columns array (e290293c)
- ngTableSelectFilterDs: not binding to scope an array returned asynchronously (4c063685)
- NgTableParams: filterDelay too high (6a3692dc)
- NgTableParams: optimize filter debounce for in-memory data arrays (8010e07f)
- NgTableParams: due to 449ab623,
Move settings().filterDelay
to settings().filterOptions.filterDelay
- NgTableParams: incorrect default sort direction applied to grouping function (7b30995e)
- groupRow: table columns are lost when switching between groups (6d2c7358)
- ngTableController: add visibleColumnCount to $groups data (53ed583c)
- NgTableParams: the url method does not URI encoded all parameter values (6e7bf3a7)
- NgTableParams: improved support for grouping data (1cd90cde)
- groupRow: extend header with a data group picker (ffa617cb)
- ngTableDefaultGetData: allow NgTableParams to determine if sorting, filtering, and paging apply (6536d734)
- NgTableParams:
- due to 1cd90cde,
settings().groupBy
renamed and moved toparameters().group
Previously:
var params = new NgTableParams({...}, { groupBy: 'role'});
// changing value:
params.settings({ groupBy: 'age'});
Now:
var params = new NgTableParams({group: 'role'}, {...});
// changing value:
params.group('age');
// OR
params.parameters({ group: { age: undefined }});
- paging is applied after grouping
This means that groups will no longer be duplicated and split across pages.
- due to 6e7bf3a7,
All parameter values are now URI encoded, thus a numerical filter value will now be returned as a quoted string
- NgTableParams: table not reloaded when special
$
filter field changes (8c287e91)
- ngTableDefaultGetData: set the
this
context of the filter function to the current NgTableParams (e23ce330)
- NgTableParams: set sensible defaults for filterComparator, filterFn and filterName (fc2fa182)
- ngTableDefaultGetData:
- filters: add ngTableSelectFilterDs directive (c79fdd86)
- filters: due to 6e1bd3d9,
ngTableController
no longer adds an empty item to the array returned by $column.filterData
.
This will only affect those apps that were using $column.filterData
to supply data to a custom
filter template.
Those apps that are using the select.html
will be unaffected as the select.html
filter will add
this empty item.
- ngTableController: should be consistent about adding empty option item (d2080600)
- filters:
- ngTableController: due to d2080600,
An empty item - { id: '', title: '' }
- is added to an array returned synchronously by filterData
function.
Implications:
- make sure to not add an empty option yourself as this will be a duplicate
- your array of items need to have an
id
andtitle
field so as to match the empty option
- pager.html: don't render empty pagination UL (ffbbca04)
- ngTableController: allow $column.filterData to return a promise (f90cbcb8)
- ngTableController: should not call reload twice when initial load fails (a01da5bd)
- NgTableParams: add hasErrorState method (093ba3d9)
- NgTableParams: default page size is unreasonably small (6aec41ca)
- NgTableParams:
- due to 6aec41ca,
Default page size has been increased from 1 to 10.
To override this behaviour set the default page size in the a run block:
angular.module("yourApp").run(setRunPhaseDefaults);
setRunPhaseDefaults.$inject = ["ngTableDefaults"];
function setRunPhaseDefaults(ngTableDefaults) {
ngTableDefaults.params.count = 1;
}
- due to 6b747850,
NgTableParams
no longer exposes a getGroups
method.
getGroups
is now a method on the settings object only.
- due to 1ed1a044,
NgTableParams
no longer exposes a getData
method
- settings: due to e29babf2,
The column
parameter of the getGroups
method has been removed.
Instead the groupBy
value on the NgTableParams.settings()
object supplied as a parameter will
be used to determine the grouping.
Previously:
var groupsFetched = tableParams.settings().getGroups('age');
Now:
tableParams.settings({ groupBy: 'age'});
var groupsFetched = tableParams.settings().getGroups(tableParams);
- ngTableDefaultGetData: should ignore null and undefined filter values (64a33a85)
- NgTableParams:
- number.html: new filter template for numbers (78b02bbf)
- NgTableParams: datasetChanged event fires too early (9706a60b)
- select-filter: select lists should not display an empty and '-' option (1ee441be)
- NgTableParams: generatePagesArray can be called without arguments (25fc82bd)
- ngTableController:
- NgTableController: optimize calls to reload (e94ca5f7)
- NgTableParams:
- ngTableController: automatically reload table when settings data array changes (4817c203)
- ngTableDefaultGetData: new service for applying NgTableParam filters (etc) to a data array (bdf5d9ee)
- ngTableEventsChannel: publish strongly typed events using explicit service (1f3e7e4c)
- ngTableFilterConfig: setConfig now merges with previous config values (155ef620)
- ngTableController: don't trigger reload whilst a reload is already in-flight (97d09ca4)
- ngTableFilterConfig: allow template urls for filters to be customized (032f6ff6)
- header.html: due to 47460d67,
The sortBy function previously declared by ngTableController
has been moved to the new controller
-
ngTableSorterRowController
. -
ngTableController: due to 97d09ca4,
Calls to NgTableParams.filter
, NgTableParams.sorting
(etc) made in the then
method of
the promise returned by NgTableParams.reload
will NOT trigger a subsequent call to NgTableParams.reload
;
the call to NgTableParams.reload
must now be explicitly be made.
Previously:
tableParams.reload().then(function(){
if (!tableParams.total() && _.size(tableParams.filter()) > 0) {
tableParams.filter({});
}
});
Now:
tableParams.reload().then(function(){
if (!tableParams.total() && _.size(tableParams.filter()) > 0) {
tableParams.filter({});
return tableParams.reload();
}
});
- ngTableController: add function to parse the expression used to initialise ngTableDynamic (e9333f98)
- ngTable+ngTableDynamic: due to b226dec9,
- showing/hiding columns now uses ng-if; ng-show is no longer supported
Previously:
<tr>
<td ng-show="showColExpr">
</tr>
Now:
<tr>
<td ng-if="showColExpr">
</tr>
- header.html: due to 6bb2aba8, anyone who relied on a specific 'position' field to order table columns will now need to change the order items's in the column array
Previously:
cols[1].position = 2;
cols[2].position = 1;
Now:
var swappedCol = cols[2];
cols[2] = cols[1];
cols[1] = swappedCol;
- example: updated code due to documentation total should be a number (ce15e94a)
- header.html: allow reordering of columns (23236e6f)
- ngTableDynamic: add a column on the fly (01682774)
- pagination: add setting paginationMaxBlocks now you can define the count of pagination blocks, minimum is 6 (bbdfaf38)
- ngTable: added setting sortingIndicator to show sorting indicator whether near header title or to the very right (10cdf358)
- ngTableController:
- filters:
- header:
- ngTable:
- ngTableDynamic: new directive that accepts dynamic array of columns (03854d33)
- column: due to 7e8448dc,
- Binding expressions used for generating
thead>th
attributes that reference the current column will need modifying
Previously:
<td title="getTitle(column)">
Now:
<td title="getTitle($column)">
- directive: due to 3113e340,
- Fields previously stored directly on a column object are now only available via the prototype chain
This will affect you only if you are enumerating / specifically checking for "own properties" of the column object.
- filters:
- due to c2f83b98,
Custom header.html templates will need to pass the current scope as a parameter to column.filter.
Previously:
<!-- snip -->
<div ng-repeat="(name, filter) in column.filter">
<!-- snip -->
... now becomes:
<!-- snip -->
<div ng-repeat="(name, filter) in column.filter(this)">
<!-- snip -->
- filters:
- due to 53ec5f93,
- $$name field on filter definitions is not supported.
Previously:
<td filter="{'username': 'text', $$name: 'username'}"</td>
... now becomes:
<td filter="{'username': 'text'}"</td>
- column.filterName has been dropped as this is no longer applicable. Custom filter templates will need to change.
Previously:
<input type="text" name="{{column.filterName}}"
... now becomes:
<input type="text" name="{{name}}"
- Multiple filters defined by the same filter definition will now render each input with a seperate name.
- filters:
- due to 7955f12b,
- column.filterTemplateURL has been dropped as this is no longer applicable. Custom header.html templates will need to change.
Previously:
<tr class="ng-table-filters" ng-init="tableParams">
<th ng-repeat="column in columns" ng-show="column.visible" class="filter">
<div ng-repeat="(name, filter) in column.filter">
<div ng-if="column.filterTemplateURL" ng-show="column.filterTemplateURL">
<div ng-include="column.filterTemplateURL"></div>
</div>
<div ng-if="!column.filterTemplateURL" ng-show="!column.filterTemplateURL">
<div ng-include="'ng-table/filters/' + filter + '.html'"></div>
</div>
</div>
</th>
</tr>
... now becomes:
<tr class="ng-table-filters" ng-init="tableParams">
<th ng-repeat="column in columns" ng-show="column.visible" class="filter">
<div ng-repeat="(name, filter) in column.filter">
<div ng-if="filter.indexOf('/') !== -1" ng-include="filter"></div>
<div ng-if="filter.indexOf('/') === -1" ng-include="'ng-table/filters/' + filter + '.html'"></div>
</div>
</th>
</tr>
- Specifying the url to a filter template has changed.
Previously:
<td filter="{ 'name': 'text', templateURL: 'path/to/textFilter.html'}"</td>
... now becomes:
<td filter="{ 'name': 'path/to/textFilter.html'}"</td>
- Multiple filters defined by the same filter definition will now specify their own url.
Previously:
<td filter="{
'fname': 'text',
'lname': 'text',
templateURL: 'path/to/textFilter.html'}"</td>
... now becomes:
<td filter="{
'fname': 'path/to/textFilter.html',
'lname': 'path/to/textFilter.html'}"</td>
- header:
- due to 699b2a58,
parse method on the ngTable scope has been removed as it's no longer required
- header:
- due to 60de2066,
Previously, a css class was added to TH elements thusly:
<tr ng-repeat="row in $data">
<td header-class="myHeaderClass"></td>
</tr>
Now:
<tr ng-repeat="row in $data">
<td header-class="'myHeaderClass'"></td>
</tr>
- add pagination directive ngTablePagination (see usage)
- rename filter.name to filter.$$name according to issue #196
- add debugMode setting
- add defaultSort setting
- add filterDelay setting
- add multisorting (click on header with Ctrl-key)
- add css classes (ng-table-pager, ng-table-pagination, ng-table-counts)
- add support of
header-class
attribute - add fixes for compatibility with early versions of AngularJS
- add
data
field to ngTableParams - Allow expressions in the sortable & filter attribute (Issue #93)
- I abandoned from CoffeeScript in favor of a javascript, fully agree with http://blog.ponyfoo.com/2013/09/28/we-dont-want-your-coffee & (rus) http://habrahabr.ru/post/195944/
- added examples of table with grouping
- fully rewrited interface of ngTableParams
In functions that return data for the filters were removed .promise
$scope.names = function(column) {
...
def.resolve(names);
// return def.promise; - old code
return def;
};