$ 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;
}]);
;
嗨,我是AngularJS中的新成员,我想知道如何将从API接收的数据发送到全局变量并将其注入$ scope。在这个例子中,我想从$ q发送我的结果并在我的视图中显示它。
做这样的:
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);
});
你在成功回调代码是不是最好的之一。基本上它工作,但你会有一些时间问题(并没有多大意义)。
是的,我收到数据,但不是我所期望的,我应该收到来自请求的数据,这些请求是我在$ http中发送的,在这里我没有使用函数.login()收到数据,所以当我调用函数.login()时,没有什么是刷新,有我期望的数据。你明白我在说什么吗? – xenurs
你想要接收你从http调用中获得的数据。这些数据将在您的成功回调中(这是您的代码中的'结果')。这将通过承诺来解决。之后,你的login()函数将返回一个promise,你用login(...)。然后输入(function(THIS_IS_THE_RESPONSE){});.你需要'then'功能,它被承诺使用。 http://andyshora.com/promises-angularjs-explained-as-cartoon.html – CodeNashor
没错!我想将我的变量“结果”发送到我的控制器,以便我可以重新使用它,因为我想 – xenurs
关于如何有效地使用“$ q”的很好的解释:http://www.codelord.net/2015/09/24/$q-dot-defer-youre-doing-it-wrong/ – Aliz