2014-05-09 93 views
0

我正在開發我的第一個角度應用程序。但我無法訪問來自服務器的控制器中的數據。 服務代碼如下。無法從工廠訪問控制器中的數據

var BASE =「https://abc.com/」;

loginApp.factory('authFactory',function ($http,$location){ 
    var factory ={}; 
    factory.login= function (username ,password){ 

     var loginData='{"emailId":"'+username+'","password":"'+password+'"}'; 

     return $http({ url: BASE+'/login' , 
         method: "POST", 
         data: loginData 
      }).success(function (results) { 
       console.log("in service" +results.token); 
       return results; 
      }).error(function() { 
       console.log("error occured"); 
       var err = "error"; 
       return err; 
     }); 
    }; 
    return factory; 
}); 

我的控制器代碼如下。

loginApp.controller ('LoginController',function ($scope, $rootScope, $location,authFactory){ 
      $scope.submit= function(){ 
        authFactory.login($scope.username, $scope.password).then(function (status) { 
         console.log("status is" +status.token); 
        }); 
      }; 

}); 

我的問題是我能夠從服務訪問results.token但如果我試圖爲status.token從控制器訪問同樣的道理,它給「未定義」。請幫助解決這個問題。

+0

什麼是你的服務器端代碼? – user2422960

+0

你可以只記錄'status'還是那個未定義的? –

回答

0

只返回$ HTTP承諾,在你的控制器處理:

在服務:

return $http({ url: BASE+'/login' , 
        method: "POST", 
        data: loginData 
     }); 

在控制器:

authFactory.login($scope.username, $scope.password) 
.success(function(status) { 
        console.log("status is" +status.token); 
       }); 
+1

回答這個問題的一個重要組成部分(這對於新來Angular和承諾的人來說很常見)解釋說'$ http'使用承諾來管理異步請求。所以當'login'使用'return $ http(...)'返回時,它會返回一個_promise_,控制器可以通過上面的例子來獲取結果值。新人經常做OP所做的事情,並認爲從他們的'.success'函數返回將使'login'返回響應的結果。事實並非如此。 – HackedByChinese

+0

謝謝......它正在工作。 – dip

0

我的建議是基於REST和承諾基於角度的模塊Restangular,讓您輕鬆編寫一些服務來傳達您的API。例如,在您的情況:

myModule.factory('authFactory', ['Restangular', 
    function(Restangular) { 
    return { 
     login: function(name, password) { 
     // post /login 
     return Restangular.all('login').post({"emailId":"'+name+'","password":"'+password+'"}); 
     } 
    }; 
    } 
]); 

更新:在你的控制器,你應該在末尾添加該代碼來調用函數

$scope.submit(); 
+0

雖然Restangular是一個美麗的圖書館,我也用我自己,但這並沒有解決問題。您還應該解釋如何將這些數據傳送給控制器 –

相關問題