我有一个工厂包含保存客户功能。成功之后我想在控制器中传递其响应,以便我可以更新视图。
sampleApp.factory("authFactory", function($location, $http, transformRequestAsFormPost) {
return {
saveCustomer: function(data) {
var request = $http({
method: "post",
url: "webservice/ws.php?mode=saveCustomer",
transformRequest: transformRequestAsFormPost,
data: data
});
request.success(
function(response) {
console.log(response);
}
);
}
};
});
sampleApp.controller('customerController', function($scope, testService,authFactory,$http) {
$scope.addCustomer = function() {
var data = {name: $scope.customerName,city: $scope.customerCity};
// Calling Factory Function
authFactory.saveCustomer(data);
// How to fetch response here
}
});
请帮我解决这个问题 感谢
答案 0 :(得分:4)
各种方式,首先想到的是这样的:
//in your factory
return {
saveCustomer: function(data) {
var request = $http({...});
return request;
}
}
//in your controller
authFactor
.saveCustomer(data)
.success(function() {
//update controller here
})
答案 1 :(得分:3)
您正在使用“promises”。根据您从服务方法中返回的内容,您可以做一些不同的事情。
您可以做的一件事就是返回承诺并在您的控制器中处理它。
服务:
return {
saveCustomer: function(data) {
return $http({...});
}
}
位指示:
authFactor.saveCustomer(data).success(function(customer) {
$scope.customer = customer;
})
您可以做的另一件事是返回一个对象引用并将其放在您的范围内。填充对象后,它将在您的范围内更新。
服务:
return {
saveCustomer: function(data) {
var customer = {};
$http({...}).success(function(data){
angular.copy(data, customer);
});
return customer;
}
}
控制器:
$scope.customer = authFactor.saveCustomer(data);
第二种方式的优点是大部分逻辑都保留在您的服务中。你的控制器保持简单,不必知道承诺或处理它们。