@@ -909,6 +909,7 @@ function dtPromiseRenderer($q, $timeout, $log, DTRenderer, DTRendererService, DT
909
909
var _oTable ;
910
910
var _loadedPromise = null ;
911
911
var _$elem ;
912
+ var _$scope ;
912
913
913
914
var dtInstance ;
914
915
var renderer = Object . create ( DTRenderer ) ;
@@ -920,10 +921,11 @@ function dtPromiseRenderer($q, $timeout, $log, DTRenderer, DTRendererService, DT
920
921
renderer . rerender = rerender ;
921
922
return renderer ;
922
923
923
- function render ( $elem ) {
924
+ function render ( $elem , $scope ) {
924
925
var defer = $q . defer ( ) ;
925
926
dtInstance = DTInstanceFactory . newDTInstance ( renderer ) ;
926
927
_$elem = $elem ;
928
+ _$scope = $scope ;
927
929
_resolve ( renderer . options . fnPromise , DTRendererService . renderDataTable ) . then ( function ( result ) {
928
930
_oTable = result . DataTable ;
929
931
DTInstanceFactory . copyDTProperties ( result , dtInstance ) ;
@@ -951,14 +953,17 @@ function dtPromiseRenderer($q, $timeout, $log, DTRenderer, DTRendererService, DT
951
953
952
954
function changeData ( fnPromise ) {
953
955
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 ;
954
959
DTRendererService . showLoading ( _$elem ) ;
955
960
_resolve ( renderer . options . fnPromise , _redrawRows ) ;
956
961
}
957
962
958
963
function rerender ( ) {
959
964
_oTable . destroy ( ) ;
960
965
DTRendererService . showLoading ( _$elem ) ;
961
- render ( _$elem ) ;
966
+ render ( _$elem , _$scope ) ;
962
967
}
963
968
964
969
function _resolve ( fnPromise , callback ) {
@@ -1046,6 +1051,7 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
1046
1051
function create ( options ) {
1047
1052
var _oTable ;
1048
1053
var _$elem ;
1054
+ var _$scope ;
1049
1055
var renderer = Object . create ( DTRenderer ) ;
1050
1056
renderer . name = 'DTAjaxRenderer' ;
1051
1057
renderer . options = options ;
@@ -1055,8 +1061,9 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
1055
1061
renderer . rerender = rerender ;
1056
1062
return renderer ;
1057
1063
1058
- function render ( $elem ) {
1064
+ function render ( $elem , $scope ) {
1059
1065
_$elem = $elem ;
1066
+ _$scope = $scope ;
1060
1067
var defer = $q . defer ( ) ;
1061
1068
var dtInstance = DTInstanceFactory . newDTInstance ( renderer ) ;
1062
1069
// Define default values in case it is an ajax datatables
@@ -1082,14 +1089,13 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
1082
1089
1083
1090
function changeData ( ajax ) {
1084
1091
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 ;
1089
1095
}
1090
1096
1091
1097
function rerender ( ) {
1092
- render ( _$elem ) ;
1098
+ render ( _$elem , _$scope ) ;
1093
1099
}
1094
1100
1095
1101
function _doRender ( options , $elem ) {
0 commit comments