Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Save current user information and use it in controllers

Tags:

angularjs

I have the following Angular service:

angular.module("app").factory("userService", userService);

userService.$inject = ["$http"];

function userService($http) {
  return { 
    getAuthenticatedUserInfo: function () {
      return $http.get("/api/v1/users/me");
    }     
  }
}

I am getting information about the current user such as Id, Name, ...

I want to use this information in my controllers but I do not want to call the API (getAuthenticatedUserInfo) everytime I need that information ... Does it make sense?

What is the best option use this information in other controllers?

like image 997
Miguel Moura Avatar asked Dec 29 '25 20:12

Miguel Moura


1 Answers

Create a local variable within the service and store the user in there. Only perform the HTTP call if the local variable is undefined. To make sure you always return a promise, whether the local user is available or not, use $q's when function:

angular.module("app").factory("userService", userService);

userService.$inject = ["$http", "$q"];

function userService($http, $q) {

    var currentUser;
  return { 
    getAuthenticatedUserInfo: function () {
        if (currentUser){
            return $q.when(currentUser);            
        } else {
            return $http.get("/api/v1/users/me").then(function(response) {
                currentUser = response.data;
                return response.data;
            });
        }

    }     
  }
}

PS never ever use global variables

like image 139
fikkatra Avatar answered Dec 31 '25 13:12

fikkatra



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!