2016-01-12 63 views
0

異步獲取數據我想創建一個標籤,顯示誰是登錄的用戶名:在AngularJS

<p style="color:white;font-weight:bolder;font-size:20px;padding-left:15px" title="Enter">{{userName}} Welcome</p> 

在我的控制器我檢查,如果用戶被驗證:

$scope.initial = function() { 
     $http.get('Accounts/UserIsAuthenticated').success(function (response) { 
      // Accounts/UserIsAuthenticated check whether user is authenticated or not, and return bool value 
      debugger; 
      if (response == 'True') { 
       $rootScope.showLogin = false; 
       $rootScope.showWelcome = true; 
       $scope.userName = getUserName(); 
       $rootScope.showLogout = true; 

      } 
      else { 
       $rootScope.showLogin = true; 
       $rootScope.showWelcome = false; 
       $rootScope.showLogout = false; 
      } 

     }); 
    }; 
    function getUserName() { 
     $http.get('Accounts/GetUserName').success(function (response) { 
      return response; 
     }); 
    } 

{{userName}}雖然設置爲undefined。我知道getUserName()需要時間回覆,所以我該如何解決?

編輯:編輯我的代碼:

$scope.initial = function() { 
     $http.get('Accounts/UserIsAuthenticated').success(function (response) { 
      if (response == 'True') { 
       $rootScope.showLogin = false; 
       $rootScope.showWelcome = true; 
       getUserName().then(function (username) { 
        debugger; 
        $scope.username = username; 
       }); 

       $rootScope.showLogout = true; 

      } 
      else { 
       $rootScope.showLogin = true; 
       $rootScope.showWelcome = false; 
       $rootScope.showLogout = false; 
      } 

     }); 
    }; 

    function getUserName() { 
     $http.get('Accounts/GetUserName'); 

    } 

但它不工作!問題是什麼?

+1

的'return'在這段代碼不會真的返回任何東西。它在回調函數內部,它不能返回任何東西。它不在'getUserName'函數內,它可以返回一些東西,但是在那裏移動它並沒有幫助。一般來說,當處理異步方法時,你不會**返回*值*,你會**返回* promise *以後會有一個值。 (''return $ http.get(...'在這個例子中) – Claies

回答

1

您getUsername改成這樣:

function getUserName() { 
    // return the promise 
    return $http.get('Accounts/GetUserName'); 
} 

然後使用它是這樣的:

if (response == 'True') { 
    $rootScope.showLogin = false; 
    $rootScope.showWelcome = true; 
    // use the promise 
    getUserName().then(function(username){ 
     $scope.username = username; 
    }); 
    $rootScope.showLogout = true; 
} 

或者,只是改變你的getUsername這個:

function setUserName() { 
    $http.get('Accounts/GetUserName').success(function (response) { 
     $scope.username = response; 
    }); 
} 
+0

感謝您的回答,但我得到一個錯誤:'不能讀取屬性',然後'undefined' – pejman

+0

你必須返回'$ http'調用,請參閱我的回答中的第一個函數 – devqon

+0

是的,我按照你的說法做了!! – pejman