2014-03-29 86 views
0

我建立與用戶認證基部的簡單的應用程序在此:linkAngularJS傳遞服務變量到控制器

基本上,我有一個userAccountService,負責與服務器和登錄控制器處理登錄過程進行通信。

從其他控制器我想檢查用戶是否已經登錄(以隱藏登錄按鈕,並顯示用戶配置文件)。

所以我有一個navController

function navCtrl ($scope, $modal, userAccountService) { 

    $scope.IsUserLoggedIn = function() { 
     return userAccountService.isUserLoggedIn; 
    } 

} 

所以在HTML我用這個ng-hide="isUserLoggedIn()

我userAccountService:

app.factory('userAccountService', ['$http', '$q', userAccountService]); 

function userAccountService($http, $q) { 

    var service = { 
     registerUser: registerUser, 
     loginUser: loginUser, 
     logOut: logOut, 
     getValues: getValues, 
     isUserLoggedIn: false, 
     accessToken: "" 
    }; 

    // code ommited 
    function loginUser(userData) { 
     var tokenUrl = serverBaseUrl + "/Token"; 
     if (!userData.grant_type) { 
      userData.grant_type = "password"; 
     } 

     var deferred = $q.defer(); 

     $http({ 
      method: 'POST', 
      url: tokenUrl, 
      data: userData, 
     }) 
      .success(function (data,status,headers,cfg) { 
       // save the access_token as this is required for each API call. 
       accessToken = data.access_token; 
       isUserLoggedIn = true; 
       // check the log screen to know currently back from the server when a user log in successfully. 
       console.log(data); 
       deferred.resolve(data); 
      }) 

      .error(function (err, status) { 
       console.log(err); 
       deferred.reject(status); 
      }); 

     return deferred.promise; 
    } 
} 

我在做什麼錯?這裏有另外一個有趣的讀物,我從中獲得靈感:link

+1

我們不知道你做錯了什麼,因爲你沒有告訴我們您的問題是什麼。你期待什麼行爲?發生什麼事? – JeffryHouser

回答

2

你不能返回一個變量,但你可以返回一個函數,所以創建一個返回該變量的函數。

嘗試這樣的事情,它返回你的服務對象(你可能想要把一個$表就可以了):

服務

function userAccountService($http, $q) { 

    function getData() { 
     return service; 
    } 
    ... 
} 

控制器

$scope.IsUserLoggedIn = userAccountService.getData().isUserLoggedIn; 

另外,你沒有正確地從你的成功回調中更新狀態變量 - 你正在創建全局變量而不是使用服務對象的屬性。因此,舉例來說:

isUserLoggedIn = true; 

應該是:

service.isUserLoggedIn = true; 
+0

仍然不起作用 - 我將'console.log(service)'放在loginUser中的$ http.success中 - isUserLoggedIn設置爲true。我把getData函數放在我的控制器中,和你在這裏寫的一樣。 –

+0

而且,會發生什麼?我不確定我能否抓住你寫的所有內容。 – Shomz

+0

打印到控制檯的服務對象具有屬性'isUserLoggedIn:true',但在我的導航控制器中,'$ scope.IsUserLoggedIn = userAccoutnService.getData()。isUserLoggedIn'仍然是false。我添加了console.log()做getData()函數,它似乎從來沒有被調用過。 –

相關問題