返回$ rootScope函数中的对象(AngularJS)

时间:2016-07-20 21:58:40

标签: javascript angularjs json

我试图从AngularJS中名为retrieveUser()的$ rootScope函数返回一个对象。该对象被返回。 $ http成功时,我在运行的函数的响应上运行了console.log()。这是我的$ rootScope函数:

    $rootScope.retrieveUser = function() {

        var apiUrl = "http://104.251.218.29:8080";

        if($cookies.get('tundraSessionString')) {

            var cookie = $cookies.get('tundraSessionString');

            $http({
                method: "POST",
                url: apiUrl + "/api/master/v1/auth/checkauth",
                data: "sessionString=" + cookie,
                headers: {
                    'Content-Type' : 'application/x-www-form-urlencoded;',
                    'Cache-Control': 'no-cache'
                }
            }).then(function mySuccess(response) {

                if(response.data.event == "error") {

                    window.location = "/auth/logout";

                } else {

                    return response.data;

                }


            })

        } else {

            window.location = "/auth/login";

        }

    };

使用这种方法,我可以在我的控制器中访问它(和console.log()只是为了测试我的工作):

vm.user = $rootScope.retrieveUser();
console.log($rootScope.retrieveUser());

但是,我还没有让它发挥作用。我已经尝试在$ rootScope函数中指定数组中的特定对象。我知道它运行,因为我在运行时让$ rootScope安慰了一些东西,它显示了$ http请求响应的console.log()。它看起来像这样:

Object {event: "success", table: Object}
event:"success"
table:Object
__proto__:Object

然而,当我在console.log()函数$ rootScope.retrieveUser()的vm.user时,即使该函数应该返回该对象,我只是收到“undefined”。

我几天来一直在敲打这个问题,阅读一些关于功能/对象的文章,我仍然无法理解这一点。我们待了两天。

3 个答案:

答案 0 :(得分:1)

设置Cookie时,您从retrieveUser返回的内容是$http返回的内容,即promise。试试这个:

$rootScope.retrieveUser().then(function(user){vm.user = user;})

答案 1 :(得分:1)

试试这个:

        if($cookies.get('tundraSessionString')) {

            var cookie = $cookies.get('tundraSessionString');

            //return a promise
            return $http({
                method: "POST",
                url: apiUrl + "/api/master/v1/auth/checkauth",
                data: "sessionString=" + cookie,
                headers: {
                    'Content-Type' : 'application/x-www-form-urlencoded;',
                    'Cache-Control': 'no-cache'
                }
            }).then(function mySuccess(response) {

                if(response.data.event == "error") {

                    window.location = "/auth/logout";

                } 
                else {

                    return response.data;

                }


            })

        } 
        else {

            window.location = "/auth/login";

        }

$rootScope.retrieveUser().then(function(user){vm.user = user;})

答案 2 :(得分:0)

retrieveUser fn无法返回您的数据:) $ http是异步函数,你应该阅读promises

function handleUser(user){
//do something
}

function retrieveUser(callback){
  $http({...}).then(function(response){
    callback(response.data.user);
  });
}
//how to use it:

retrieveUser(handleUser);

但首先您可能需要一项服务来获取一些数据而不是使用$ rootScope

其次,您可以在script标记中传递模板中的用户 然后你不需要另一个http请求,用户将获得全球可用

<script>var user=<?php echo json_encode($user);?></script>