我正在通过angular.js
对我的控制器进行http调用,并尝试将响应存储在一个全局变量中,如下所示。
app.controller('dashBoardController', ['$scope', '$http', '$location',
function ($scope, $http, $location) {
$scope.details = [];
var init = function () {
$http({
method: 'GET',
url: urlpath + '/values'
}).success(function (response) {
$scope.workouthistory = JSON.stringify(response);
$scope.details = response;
console.log($scope.details)
});
}
init();
alert($scope.details)
]);
但是当我尝试打印全局存储在数组中的响应时,我得到一个空白的响应。但是,方法内的控制台正确打印响应。请帮助我弄清楚如何在全球范围内存储此响应。
答案 0 :(得分:1)
您的警报代码在您设置变量的函数之前运行并具有console.log。 success()调用中的函数是一个回调函数,它在http请求返回响应时运行。
您可以尝试将警报消息移动到新的全局函数中,然后在成功回调中调用该函数。
答案 1 :(得分:0)
首先,使用良好的编程实践角度中的全局变量应该使用服务来定义。其他地方无法访问范围属性。 其次,这些任务可以使用promises执行,如下面的
(function () {
var app = angular.module("myApp", []);
app.constant("globalVariableSvc", { details: [] });
app.controller("dashboardCtrl", function ($scope, $q, $http, $location, globalVariableSvc) {
//creating a promise
function getValues() {
var dfd = $q.defer();
$http.get(urlpath + '/values')
.success(function (response) {
dfd.resolve(response);
})
.error(function (response) {
dfd.reject(response);
});
return dfd.promise;
}
function init() {
globalVariableSvc.details = [];
//using promise
getValues()
.then(function (response) {
// when promise is being resolved or it has succeeded to perform the task
$scope.workouthistory = JSON.stringify(response);
globalVariableSvc.details = response;
console.log(globalVariableSvc.details)
alert(globalVariableSvc.details);
}, function (response) {
// when promise is being rejected or it has failed to perform the task
alert(globalVariableSvc.details);
});
}
init();
});
}());