Angular.js:如何为所有app控制器调用一次服务

Ahm*_*lem 2 angularjs

我不知道这是否是Angular概念中的一个或可能做的,但我有一个调用用户信息的服务(name,id,age,...):

.factory('me', function($resource, API_URL, $q) {
    return {
        getUser: function() {
            var deferred = $q.defer();
            var url = API_URL + 'api/me';
            $resource(url)
                .get(function(user) {
                    deferred.resolve(user);
                }, function(response) {
                    deferred.reject(response);
                });
            return deferred.promise;
        }
    };
})
Run Code Online (Sandbox Code Playgroud)

我在很多地方使用这项服务controllers来获取user数据并使用它与其他http电话一起发送.例如在我的newItemCtrl

.controller('newItemCtrl', function($scope, $http, API_URL, me) {
Run Code Online (Sandbox Code Playgroud)

me在许多其他控制器中调用了该服务

我想知道有没有办法只调用一次这个服务,并在所有控制器中使用它,而不是在每个控制器中使用x次

use*_*587 5

我通过在第一次返回服务时将值设置为服务来随时执行类似的操作.现在,一旦在服务中设置了数据,它将返回存储的用户数据,而不是向服务器发出请求.

service('myService', function($q, $http) {
  this.data;
  var self = this;

  this.getMyData = function() {
    if (angular.isDefined(self.data)) {
      // use $q to return a promise
      return $q.when(self.data)
    }
    return $http.get('myurl').then(function(resp) {
      self.data = resp;
    })
  }

}
Run Code Online (Sandbox Code Playgroud)

在你的控制器中你可以打电话 myService.getMyData()