angularjs - 保存当前用户信息,并在 Controller 中使用

标签 angularjs

我有以下 Angular 服务:

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

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

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

我正在获取有关当前用户的信息,例如 Id、姓名...

我想在我的 Controller 中使用此信息,但我不想在每次需要该信息时调用 API (getAuthenticatedUserInfo) ...这有意义吗?

在其他 Controller 中使用此信息的最佳选择是什么?

最佳答案

在服务中创建一个局部变量并将用户存储在其中。仅当局部变量未定义时才执行 HTTP 调用。为确保您始终返回 promise ,无论本地用户是否可用,请使用 $q 的 when 函数:

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从不使用全局变量

关于angularjs - 保存当前用户信息,并在 Controller 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36645399/

相关文章:

javascript - AngularJS类类型检查解决方案

javascript - 如果存在多个模态框,模态框弹出窗口不会关闭

javascript - AngularJS 获取和设置值

javascript - AngularJS Controller 不在 jsFiddle 中执行

javascript - 如何使用 Angular 引导日历为重复事件提供 dtStart 和 until?

javascript - 根据下拉列表中所选的值显示模态

javascript - Angular JS 中的循环

angularjs - Angular Material响应式可滚动div

AngularJS 无法在 Controller 上注入(inject)已解析的对象

angularjs - 在 Protractor 测试中创建 socket.io 服务器