簡體   English   中英

$ rootScope函數(AngularJS)中的返回對象

[英]Return Object in $rootScope Function (AngularJS)

我試圖從AngularJS中名為$ rejectUser()的$ 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

但是,當我使用$ rootScope.retrieveUser()函數使用console.log()vm.user時,即使該函數應該返回對象,我也只會收到“ undefined”。

幾天來,我一直在努力工作,閱讀一些有關函數/對象的文章,但仍然無法解決。 我們兩天了。

設置cookie時,您從restoreUser返回的是$ http返回的內容,這是一個promise 嘗試這個:

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

嘗試這個:

        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;})

retrieveUser fn不會返回您的數據:) $ http是異步函數,您應該閱讀有關promise的信息

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM