在全局变量中存储角度js响应的问题

时间:2015-04-22 02:38:05

标签: javascript jquery angularjs html5

我正在通过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)
        ]);

但是当我尝试打印全局存储在数组中的响应时,我得到一个空白的响应。但是,方法内的控制台正确打印响应。请帮助我弄清楚如何在全球范围内存储此响应。

2 个答案:

答案 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();
    });
}());