2016-02-26 204 views
1
//controller pour connection to API 
.controller('LoginConnect', ['$scope', 'connecting', 
function($scope,connecting){ 
    $scope.user = {}; 
    var users = $scope.user; 


    $scope.connect = function (users) { 

     var log = $scope.user.login; 
     var pass = $scope.user.password; 
     var mydata = {}; 
     connecting.login(log,pass,mydata); 
     $scope.datab = mydata; 
    }; 
    } 
]) 

    //factory pour aller chercher le token 
.factory('connecting', ['$http','$q', function ($http,$q){ 
     var token; 
     var ConnectingFactory = {}; 
     ConnectingFactory.login = function(log,pass){ 

     var deferred = $q.defer(); 
     $http({ 
      method: 'POST', 
      url: "http://api.tiime-ae.fr/0.1/request/login.php", 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
      transformRequest: function(obj) { 
       var str = []; 
       for(var p in obj) 
       str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
       return str.join("&"); 
      }, 
      data: {login: log, password: pass} 
      }) 
     .success(function(result){ 
      deferred.resolve(result); 
      var promise = deferred.promise; 
      promise.then(function(result){ 
      var mydata = result["data"]; 
      } 
     ); 
     }) 
     }; 
     return ConnectingFactory; 
}]); 
; 

嗨,我是AngularJS中的新成員,我想知道如何將從API接收的數據發送到全局變量並將其注入$ scope。在這個例子中,我想從$ q發送我的結果並在我的視圖中顯示它。

+0

關於如何有效地使用「$ q」的很好的解釋:http://www.codelord.net/2015/09/24/$q-dot-defer-youre-doing-it-wrong/ – Aliz

回答

1

做這樣的:

ConnectingFactory.login = function(log,pass){ 
    var deferred = $q.defer(); 
     $http({...}).success(function(data){ 
      deferred.resolve(data); 
     }); 

    return deferred.promise; 
} 

connecting.login(log,pass).then(function(data){ 
    $scope.datab = data; // your recived data 
}); 

你也應該實現諸如HTTP響應的錯誤:

.error(function(data){ 
    deffered.reject(data); 
}); 

你在成功回調代碼是不是最好的之一。基本上它工作,但你會有一些時間問題(並沒有多大意義)。

+0

是的,我收到數據,但不是我所期望的,我應該收到來自請求的數據,這些請求是我在$ http中發送的,在這裏我沒有使用函數.login()收到數據,所以當我調用函數.login()時,沒有什麼是刷新,有我期望的數據。你明白我在說什麼嗎? – xenurs

+0

你想要接收你從http調用中獲得的數據。這些數據將在您的成功回調中(這是您的代碼中的'結果')。這將通過承諾來解決。之後,你的login()函數將返回一個promise,你用login(...)。然後輸入(function(THIS_IS_THE_RESPONSE){});.你需要'then'功能,它被承諾使用。 http://andyshora.com/promises-angularjs-explained-as-cartoon.html – CodeNashor

+0

沒錯!我想將我的變量「結果」發送到我的控制器,以便我可以重新使用它,因爲我想 – xenurs