我将两个日期传递给post方法thro controller。服务根据给定的输入回复一些数据。我使用$scope.onGetData
从data
获取post method
,以显示最终结果,但不会进入$scope.onGetData
。所以问题是如何从服务中获取响应数据并在控制器中使用它,以便我可以在我的视图中使用它。
控制器:
$scope.computationList;
$scope.onViewLoaded = function () {
computationManagementService.getComputation($scope.onGetData);
}
$scope.onGetData = function (data,response,error) {
$scope.computationList = data;
}
$scope.calculateInput=function(start,end,htmlValidation)
{
var date={'startDate':start , 'endDate':end};
if(htmlValidation){
computationManagementService.getComputation(date,function(err,response){
console.log("pass thro controller");
});
}else{
console.log("Validation Error");
}
}
});
服务:
myApp.factory('computationManagementService', function($http, settings){
var ComputationServiceFactoryObj = {};
var _getComputation= function(date,callback){
$http({
method:'POST',
url: 'localhost:/8091/date/computation',
data: date
}).success(function(data,response,config){
callback(response);
console.log(data); // data
}).error(function (data, status, error, headers, config){
if(callback) {
callback(error);
console.log(error);
}
});
}
ComputationServiceFactoryObj.getComputation= _getComputation;
return ComputationServiceFactoryObj;
});
答案 0 :(得分:1)
如果您尝试将post方法的数据用于视图,那么您可以尝试使用此方法它对我有用,但不确定它是否是使用该服务的正确方法。
服务:
myApp.factory('computationManagementService',
function($http, $rootScope, settings){
var ComputationServiceFactoryObj = {};
var _getComputation=function(callback){
var computationData=$rootScope.finalResult;
if(callback != null){
callback(computationData);
}
}
var _postComputation= function(date,callback){
$http({
method:'POST',
url: 'localhost:/8091/date/computation',
data: date
}).success(function(data){
callback(data);
$rootScope.finalResult=data;
console.log(data); // data
}).error(function (data, status, error, headers, config){
if(callback) {
callback(error);
console.log(error);
}
});
}
ComputationServiceFactoryObj.getComputation= _getComputation;
ComputationServiceFactoryObj.postComputation= _postComputation;
return ComputationServiceFactoryObj;
});
答案 1 :(得分:1)
一些好的做法:
ngResource
始终优于原始$http
服务,除非您需要一些ngResource
无法处理的复杂配置(我可以'}但是想到这样的话。为什么?它迫使你使用承诺。$digest
,以便重新评估bingings,这与角度工作方式相反,并且可能也会对性能产生负面影响。在您的情况下,我修改_getComputation
方法只是返回一个承诺:
var _getComputation = function(date) {
return $http({
method:'POST',
url: 'localhost:/8091/date/computation',
data: date
});
};
在您的控制器中:
computationManagementService.getComputation(date)
.then(function(response) {
console.log(response);
$scope.someValue = response.someValue;
}, function(error) {
console.error(error);
});
我宁愿避免在控制器中注入$scope
,而是使用ngController='MyController' as 'MyCtrl'
语法,并将视图应该可以访问的值分配给控制器实例。
答案 2 :(得分:0)
最好不要在服务中使用.success
和.error
方法,因为它们不可链接,请改用.then
格式。最新的Angular 1.6版中不推荐.success/error
个方法。
以下是Angular documentaion的Deprecation notice。
在您的服务中:
var _getComputation= function(date,callback){
return $http({
method:'POST',
url: 'localhost:/8091/date/computation',
data: date
}).success(function(data,response,config){
callback(undefined, response);
console.log(data); // data
}).error(function (data, status, error, headers, config){
if(callback) {
callback(error);
console.log(error);
}
});
}
在您的控制器中:
computationManagementService.getComputation(date,function(err,response){
console.log("pass thro controller");
console.log(response);
}