Angularjs 回报价值$q承诺

Angularjs 回报价值$q承诺,angularjs,angularjs-scope,Angularjs,Angularjs Scope,您好,我是AngularJS新手,我想知道如何将从API接收到的数据发送到全局变量并将其注入$scope。在本例中,我想从$q发送我的结果并在我的视图中显示它。按如下方式执行: //controller pour connection to API .controller('LoginConnect', ['$scope', 'connecting', function($scope,connecting){ $scope.user = {}; var users = $scop

您好,我是AngularJS新手,我想知道如何将从API接收到的数据发送到全局变量并将其注入$scope。在本例中,我想从$q发送我的结果并在我的视图中显示它。

按如下方式执行:

//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;
}]);
;
您还应该实现http响应的错误,如:

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中发送的请求中收到数据,在这里,我收到了数据,但没有使用我的函数。login()所以当我调用我的函数时。login()没有刷新,我没有预期的数据。你明白我在说什么吗?你想要接收数据,你将从你的http调用中得到这些数据。此数据将在成功回调中(代码中的“结果”)。这将通过承诺来解决。之后,login()函数将返回一个承诺,您可以使用login(…)输入该承诺;。您需要“then”函数,它由用户使用。确切地我想把我的变量“result”发送到我的控制器中,这样我就可以根据自己的意愿重新使用它了!此“result”变量位于.then函数中。connecting.login(log,pass).then(函数(数据){console.log(数据);//这是您对登录成功回调的响应});。传递的变量命名必须不同。”数据“=”结果“,这只是一个关于如何有效使用“$q”的极好解释:
.error(function(data){
   deffered.reject(data);
});