![](/img/trans.png)
[英]Angular js controller design passing data of http post response to another controller
[英]Angular 1.5 - passing http post response to controller
我正在嘗試將HTTP響應從我的控制器傳遞到服務,除了將響應發送到控制器外,它的運行效果很好,這是下面的代碼:
為我服務
app.factory('ApiService',function($http,Config,$q){ return { login: function(payload,callBack){ var deferred = $q.defer(); $http({ method:'POST', url:Config.baseUrl + '/api/login', data:payload, headers: {'Content-Type': 'application/json'}, }).then(function successCallback(callBack){ console.log(callBack); return deferred.resolve(callBack); }, function errorCallback(callBack){ //deferred.reject(error); console.log(callBack); return deferred.reject(callBack); }); return deferred.promise; } } });
對於控制器
app.controller('LoginCtrl', function($scope,$position,$rootScope,$state,ApiService) { $scope.forms = { 'loginForm':'' } var payload ={ 'username':'', 'password':'' } $scope.userLogin = function(form){ $scope.username = form.username.$modelValue; $scope.password = form.password.$modelValue; payload ={ "username":$scope.username, "password":$scope.password } ApiService.login(payload, function(result){ console.log(result); } });
現在我不明白,因為當我使用console.log()
響應時,我可以在服務中看到它,但是在控制器上做同樣的事情,卻一無所獲。
無需使其復雜。 只需從factory
退回承諾並在controller.
使用它即可controller.
廠:
app.factory('ApiService',function($http,Config,$q) {
return {
login: function(payload) {
return $http({
method:'POST',
url:Config.baseUrl + '/api/login',
data:payload,
headers: {'Content-Type': 'application/json'},
});
}
}
});
在控制器中:
ApiService.login(payload).then(function(data){
// use response data
}, function(error) {
// handle error
});
您應該這樣使用它:
ApiService.login(payload).then(function(result){
console.log(result);
});
因為您在服務中返回了承諾。 同樣,您也不需要該回調參數,因為promise上的then
方法是完成時的回調,您可以使用其解析數據。
app.factory('ApiService',function($http,Config,$q){
return {
login: function(payload){
var deferred = $q.defer();
$http({
method:'POST',
url:Config.baseUrl + '/api/login',
data:payload,
headers: {'Content-Type': 'application/json'},
}).then(function (result){
return deferred.resolve(result);
}, function (result){
return deferred.reject(result);
});
return deferred.promise;
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.