0

I wish to load first service then controller in angular js. But when it first time load the variable of service is empty. Here is my Service code

app.service('Auth', function($http, $rootScope, $cookies, $sessionStorage, $location, dataFactory) {
    var auth = {};
    $sessionStorage.logincheck1 = 0;
    auth.is_login_sim_v2 = function() {
        if ($sessionStorage.logincheck1 == 0) {
            var a = document.cookie.substr(10);
            var a1 = a.split(";");
            dataFactory.post_api('users/loginchecking', {
                'session_id': a1[0]
            }).then(function(resultChech) {
                //console.log(resultChech);
                $sessionStorage.logincheck1 = 1;
                $sessionStorage.edgar_id = resultChech.checking_id;
                $rootScope.$broadcast('Auth:isLoginSuccess');
                //console.log($sessionStorage.edgar_id);
                if ($sessionStorage.edgar_id === undefined) {
                    console.log('1');
                    return false;
                } else if ($sessionStorage.edgar_id == 'undefined') {
                    console.log('2');
                    return false;
                } else if ($sessionStorage.edgar_id == '') {
                    console.log('3');
                    return false;
                } else {
                    console.log('4');
                    return $sessionStorage.edgar_id;
                }
            });
        } else if ($sessionStorage.logincheck1 == 1) {
            //console.log(document.cookie.substr(10));
            if ($sessionStorage.edgar_id === undefined) {
                return false;
            } else if ($sessionStorage.edgar_id == '') {
                return false;
            } else {
                return $sessionStorage.edgar_id;
            }
        }
    }
})

And Here is my controller code:

$scope.$on('Auth:isLoginSuccess', function() {
    // calculation based on service value
    console.log(Auth.is_login_sim_v2());
    console.log($sessionStorage.edgar_id);

    if (Auth.is_login_sim_v2() == false) {
        $scope.isLoggedIn=false;
    } else if(Auth.is_login_sim_v2() === undefined){
        $scope.isLoggedIn=false;
    } else{
        $scope.isLoggedIn=true;
    }
})
Martin Gottweis
  • 2,721
  • 13
  • 27
  • please go through this link once. http://stackoverflow.com/questions/16286605/angularjs-initialize-service-with-asynchronous-data – optimus Sep 12 '16 at 17:00

1 Answers1

0

Inject your Service to Controller, and it should work fine.

app.controller('YourController',['$scope', '$rootScope', '$stateParams',
  '$location', '$localStorage', '$http', '$cookies', 'Auth',
  '$sessionStorage', 'toastr','dataFactory','$ocLazyLoad',
   function($scope, $rootScope, $stateParams, $location, $localStorage,
     $http, $cookies, Auth,
     $sessionStorage, toastr,dataFactory,$ocLazyLoad){
       //Your code
       // calculation based on service value
       console.log(Auth.is_login_sim_v2());
       console.log($sessionStorage.edgar_id);

       if (Auth.is_login_sim_v2() == false) {
          $scope.isLoggedIn=false;
       } else if(Auth.is_login_sim_v2() === undefined){
          $scope.isLoggedIn=false;
       } else{
          $scope.isLoggedIn=true;
       }
}]);

This will ensure your service is available. Try doing the same dependency injection for you service, which ensures the service initialises properly.

Kalyan
  • 142
  • 9