Skip to content
This repository was archived by the owner on Feb 2, 2025. It is now read-only.

Commit 644dede

Browse files
committed
Correct changing columns after changeData #359
1 parent 9f33794 commit 644dede

File tree

3 files changed

+29
-17
lines changed

3 files changed

+29
-17
lines changed

dist/angular-datatables.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,7 @@ function dtPromiseRenderer($q, $timeout, $log, DTRenderer, DTRendererService, DT
909909
var _oTable;
910910
var _loadedPromise = null;
911911
var _$elem;
912+
var _$scope;
912913

913914
var dtInstance;
914915
var renderer = Object.create(DTRenderer);
@@ -920,10 +921,11 @@ function dtPromiseRenderer($q, $timeout, $log, DTRenderer, DTRendererService, DT
920921
renderer.rerender = rerender;
921922
return renderer;
922923

923-
function render($elem) {
924+
function render($elem, $scope) {
924925
var defer = $q.defer();
925926
dtInstance = DTInstanceFactory.newDTInstance(renderer);
926927
_$elem = $elem;
928+
_$scope = $scope;
927929
_resolve(renderer.options.fnPromise, DTRendererService.renderDataTable).then(function(result) {
928930
_oTable = result.DataTable;
929931
DTInstanceFactory.copyDTProperties(result, dtInstance);
@@ -951,14 +953,17 @@ function dtPromiseRenderer($q, $timeout, $log, DTRenderer, DTRendererService, DT
951953

952954
function changeData(fnPromise) {
953955
renderer.options.fnPromise = fnPromise;
956+
// We also need to set the $scope.dtOptions, otherwise, when we change the columns, it will revert to the old data
957+
// See https://github.com/l-lin/angular-datatables/issues/359
958+
_$scope.dtOptions.fnPromise = fnPromise;
954959
DTRendererService.showLoading(_$elem);
955960
_resolve(renderer.options.fnPromise, _redrawRows);
956961
}
957962

958963
function rerender() {
959964
_oTable.destroy();
960965
DTRendererService.showLoading(_$elem);
961-
render(_$elem);
966+
render(_$elem, _$scope);
962967
}
963968

964969
function _resolve(fnPromise, callback) {
@@ -1046,6 +1051,7 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
10461051
function create(options) {
10471052
var _oTable;
10481053
var _$elem;
1054+
var _$scope;
10491055
var renderer = Object.create(DTRenderer);
10501056
renderer.name = 'DTAjaxRenderer';
10511057
renderer.options = options;
@@ -1055,8 +1061,9 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
10551061
renderer.rerender = rerender;
10561062
return renderer;
10571063

1058-
function render($elem) {
1064+
function render($elem, $scope) {
10591065
_$elem = $elem;
1066+
_$scope = $scope;
10601067
var defer = $q.defer();
10611068
var dtInstance = DTInstanceFactory.newDTInstance(renderer);
10621069
// Define default values in case it is an ajax datatables
@@ -1082,14 +1089,13 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
10821089

10831090
function changeData(ajax) {
10841091
renderer.options.ajax = ajax;
1085-
if (_oTable) {
1086-
var ajaxUrl = renderer.options.ajax.url ||  renderer.options.ajax;
1087-
_oTable.ajax.url(ajaxUrl).load();
1088-
}
1092+
// We also need to set the $scope.dtOptions, otherwise, when we change the columns, it will revert to the old data
1093+
// See https://github.com/l-lin/angular-datatables/issues/359
1094+
_$scope.dtOptions.ajax = ajax;
10891095
}
10901096

10911097
function rerender() {
1092-
render(_$elem);
1098+
render(_$elem, _$scope);
10931099
}
10941100

10951101
function _doRender(options, $elem) {

0 commit comments

Comments
 (0)