|
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