|
223 | 223 | $elem.show();
|
224 | 224 | $loading.hide();
|
225 | 225 | };
|
226 |
| - var _doRenderDataTable = function ($elem, options) { |
| 226 | + var _renderDataTableAndEmitEvent = function ($elem, options, $scope) { |
| 227 | + var oTable = $elem.DataTable(options); |
| 228 | + $scope.$emit('event:dataTableLoaded', { id: $elem.attr('id') }); |
| 229 | + return oTable; |
| 230 | + }; |
| 231 | + var _doRenderDataTable = function ($elem, options, $scope) { |
227 | 232 | // Add $timeout to be sure that angular has finished rendering before calling datatables
|
228 | 233 | $timeout(function () {
|
229 | 234 | _hideLoading($elem);
|
230 |
| - $elem.DataTable(options); |
| 235 | + _renderDataTableAndEmitEvent($elem, options, $scope); |
231 | 236 | }, 0, false);
|
232 | 237 | };
|
233 | 238 | /**
|
|
258 | 263 | return {
|
259 | 264 | options: options,
|
260 | 265 | render: function ($scope, $elem) {
|
261 |
| - _doRenderDataTable($elem, this.options); |
| 266 | + _doRenderDataTable($elem, this.options, $scope); |
262 | 267 | }
|
263 | 268 | };
|
264 | 269 | };
|
|
274 | 279 | render: function ($scope, $elem) {
|
275 | 280 | var _this = this;
|
276 | 281 | $scope.$on(DT_LAST_ROW_KEY, function () {
|
277 |
| - _doRenderDataTable($elem, _this.options); |
| 282 | + _doRenderDataTable($elem, _this.options, $scope); |
278 | 283 | });
|
279 | 284 | }
|
280 | 285 | };
|
|
287 | 292 | */
|
288 | 293 | var PromiseRenderer = function (options) {
|
289 | 294 | var oTable;
|
290 |
| - var _render = function (options, $elem, data) { |
| 295 | + var _render = function (options, $elem, data, $scope) { |
291 | 296 | options.aaData = data;
|
292 | 297 | // Add $timeout to be sure that angular has finished rendering before calling datatables
|
293 | 298 | $timeout(function () {
|
|
300 | 305 | oTable.fnDraw();
|
301 | 306 | oTable.fnAddData(options.aaData);
|
302 | 307 | } else {
|
303 |
| - oTable = $elem.DataTable(options); |
| 308 | + oTable = _renderDataTableAndEmitEvent($elem, options, $scope); |
304 | 309 | }
|
305 | 310 | }, 0, false);
|
306 | 311 | };
|
|
310 | 315 | var _this = this;
|
311 | 316 | var _loadedPromise = null;
|
312 | 317 | var _whenLoaded = function (data) {
|
313 |
| - _render(_this.options, $elem, data); |
| 318 | + _render(_this.options, $elem, data, $scope); |
314 | 319 | _loadedPromise = null;
|
315 | 320 | };
|
316 | 321 | var _startLoading = function (fnPromise) {
|
|
355 | 360 | */
|
356 | 361 | var AjaxRenderer = function (options) {
|
357 | 362 | var oTable;
|
358 |
| - var _render = function (options, $elem) { |
| 363 | + var _render = function (options, $elem, $scope) { |
359 | 364 | // Set it to true in order to be able to redraw the dataTable
|
360 | 365 | options.bDestroy = true;
|
361 | 366 | // Add $timeout to be sure that angular has finished rendering before calling datatables
|
|
374 | 379 | throw new Error('Reload Ajax not supported. Please use the plugin "fnReloadAjax" (https://next.datatables.net/plug-ins/api/fnReloadAjax) or use a more recent version of DataTables (v1.10+)');
|
375 | 380 | }
|
376 | 381 | } else {
|
377 |
| - oTable = $elem.DataTable(options); |
| 382 | + oTable = _renderDataTableAndEmitEvent($elem, options, $scope); |
378 | 383 | }
|
379 | 384 | }, 0, false);
|
380 | 385 | };
|
|
392 | 397 | $scope.$watch('dtOptions.sAjaxSource', function (sAjaxSource) {
|
393 | 398 | _this.options.sAjaxSource = sAjaxSource;
|
394 | 399 | _this.options.ajax = sAjaxSource;
|
395 |
| - _render(options, $elem); |
| 400 | + _render(options, $elem, $scope); |
396 | 401 | });
|
397 | 402 | $scope.$watch('dtOptions.reload', function (reload) {
|
398 | 403 | if (reload) {
|
399 | 404 | $scope.dtOptions.reload = false;
|
400 |
| - _render(options, $elem); |
| 405 | + _render(options, $elem, $scope); |
401 | 406 | }
|
402 | 407 | });
|
403 | 408 | }
|
|
0 commit comments