javascript - 如何将 $http.get 的结果存储到变量中

标签 javascript angularjs

我有以下场景,我需要来自特定网址的数据。我还需要将此数据保存到一个可以在 Controller 中的任何位置调用的变量中。为了解决这个问题,我编写了如下服务:

app.service("userData", function ($http, $q) {

var deferred = $q.defer();

this.getUsers = function () {
    return $http.get('/users')
        .then(function (response) {
            deferred.resolve(response.data);
            return deferred.promise;
        }, function (response) { 
            deferred.reject(response);
            return deferred.promise;
        })
    ;
};
});

然后我的 Controller 看起来像:

  app.controller('UserCtrl', function($scope, $q, userData) {
  var myData = userData.getUsers()
  .then(
      function (result) {
          $scope.users = result;
      },
      function (error) {
          console.log(error.statusText);
      }
  );
  console.log(myData)
  });

打印:

print screen

那么我如何将数据存储到可在整个 Controller 中访问的变量中? 谢谢..

最佳答案

我建议你这样做:

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

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

function userService($http, $q) {
    var deferred = $q.defer();
    var promise = null;
    var currentUser = null;
    return {
        getUserInfo: function () {
            if (promise) {
                deferred.resolve(currentUser);
                return (currentUser) ? deferred.promise : promise;
            }
            else {
                promise = $http.get("http://swapi.co/api/people/1/").then(function (response) {
                    return currentUser = response.data.name;
                });
                return promise;
            }    
        }
    }
}

您可以随时调用 userService.getUserInfo() 来获取缓存的数据。

   .config(['$routeProvider', function ($routeProvider) {
        $routeProvider.when('/view1', {
            templateUrl: 'view1/view1.html',
            controller: 'View1Ctrl',
            controllerAs: 'vc'
        });
    }])

    .controller('View1Ctrl', function (userService) {
            var vm = this;
            userService.getUserInfo().then(function (result) {
                vm.name = result
            }, function (err) {
                vm.name = err
            });
        });

我创建了一个 git 存储库来测试它: https://github.com/leader80/angular-cache-service

希望对你有帮助

关于javascript - 如何将 $http.get 的结果存储到变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680557/

相关文章:

javascript - AngularJS从包含对象的数组中过滤

javascript - API 请求函数清理 AngularJS

javascript - 将函数放入 javascript 对象中是一种好习惯吗?

internet-explorer - 进度条在除 IE 之外的所有浏览器中工作(Angular + bootstrap)

angularjs - 如何实现跨域请求的csrf保护

angularjs - AngularJS 中的 window.onbeforeunload 等价于路由

javascript - Angularjs ui utils 突出显示过滤器破坏了搜索应用程序

javascript - Facebook javascript api 和 iPad、Android

javascript - 对 ng-class 应用不同的表达式

javascript - angularFire 路线解析