我有以下场景,我需要来自特定网址的数据。我还需要将此数据保存到一个可以在 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)
});
打印:
那么我如何将数据存储到可在整个 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/