Marco Jr
Marco Jr

Reputation: 6796

AngularJS - problems when using resolve

I basically need to call a server that's will return me a JSON structure before load the controller.

I was using many methods to archive that, but it's not working. It's don't show me any error and the page got blank. Any clue about what's going on ?

This is my controller..

angular
.module('app',[
    'ngAnimate',
    'ui.router',
    'ui.bootstrap',
    'ngCookies'
])
.run(function($rootScope) {
    $rootScope.backendServer = "http://localhost:5000/";
})
.config(['$urlRouterProvider','$stateProvider', function($urlRouterProvider,$stateProvider) {
    $stateProvider
        .state('cms',{
            url: '/my',
            templateUrl: './app/templates/my.html',
            controller : 'my',
            resolve: {
                dbState: function ($q) {
                    var defer = $q.defer();
                    Database.check().then(function (s) {
                        defer.resolve(s);
                    });
                    return defer.promise;
                }
            }
        })
}])
.controller(function ($scope){

})

...and this is my service:

angular
.module('app')
.factory('Database',['$http', '$rootScope','$q', function($http, $rootScope, $q) {
    return {
        check: function () {
            var call = $rootScope.backendServer + 'cms/database/check';
            return $http.get(call);
        }
    }
}]);

Upvotes: 1

Views: 62

Answers (1)

Sachila Ranawaka
Sachila Ranawaka

Reputation: 41387

don't create a defer object when you already returning a promise. so remove the defer and just return the factory function

also, inject the Database service to resolve

 resolve: {
     dbState: function(Database) {

         return Database.check()
     }
 }

In the controller catch it like this

.controller("ctrl", function($scope, dbState) {
    console.log(dbState.data)

})

Demo

Upvotes: 3

Related Questions