Skip to content Skip to sidebar Skip to footer

How Do I Re-initialize Datatables After Data Has Loaded Via Ajax In Angularjs?

I am using AngularJS and Datatables together with a server-side script to obtain data via AJAX. My controller looks like: var currentJobId = $stateParams.jobId; var selectedJobId =

Solution 1:

With Angular ui-router you could do it with resolving your backend data before the state controller gets called.

Please have a look at the demo below or in this jsFiddle.

It's with-out datatables but that's probably the easier part to add.

(function() {
'use strict';

angular.module('demoApp', ['ui.router', 'angularSpinner'])
    .run(StartUp)
    .factory('jobsDataService', JobsDataFactory)
    .config(Config);

functionJobsDataFactory($http) {
    var backendUrl = 'http://jsonplaceholder.typicode.com';
    
    return {
        get: function(id) {
            return $http.jsonp(backendUrl + '/posts/'+id +'?callback=JSON_CALLBACK')
                .then(function(response) {
                    return response.data;
            });
        }
    };
}

functionConfig($urlRouterProvider, $stateProvider) {
    $urlRouterProvider.otherwise('/jobs/1');
    
    $stateProvider
        .state('jobs',
               {
                   url: '/jobs/:id',
                   templateUrl: 'partials/post.html',
                   resolve: {
                       job: function(jobsDataService, $stateParams) {
                           console.log($stateParams.id);
                           return jobsDataService.get($stateParams.id);
                       }
                   },
                   controller: function($scope, job) {
                       console.log(job);
                       $scope.job = job;
                   }
               });
}

functionStartUp($rootScope){
    // only used for loading spinner
    $rootScope
        .$on('$stateChangeStart', 
            function(event, toState, toParams, fromState, fromParams){ 
                $rootScope.loading = true;
        });

    $rootScope
        .$on('$stateChangeSuccess',
            function(event, toState, toParams, fromState, fromParams){ 
                $rootScope.loading = false;
        });

}
    
})();
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.3/angular.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.3.1/spin.min.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/angular-spinner/0.6.2/angular-spinner.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js"></script><divng-app="demoApp"><spanus-spinner=""ng-if="loading"></span><ahref="#"ui-sref='jobs({id: 1})'>job 1</a><ahref="#"ui-sref='jobs({id: 2})'>job 2</a><ahref="#"ui-sref='jobs({id: 3})'>job 3</a><divui-view=""></div><scripttype="text/ng-template"id="partials/post.html"><p>debug id = {{job.id}}</p><h1>{{job.title}}</h1><p>{{job.body}}</p></script></div>

Post a Comment for "How Do I Re-initialize Datatables After Data Has Loaded Via Ajax In Angularjs?"