$http({
'url': $scope.clientResult.resource_server_base_uri + 'services/v6.0/agent-sessions',
'method': 'POST',
'headers':{'Authorization': 'bearer ' + $scope.clientResult.access_token,'content-Type': 'application/json'},
'data': $scope.startSessionPayload
}).success(function(data) {
$scope.data = data;
console.log('data', $scope.data)
}).error(function(status) {
$scope.status = status;
});
我对角度和发展总体上有点新意。对于我来说,最好的方法是将这个代码从我的控制器中移出角度并进入工厂。我觉得这会更模块化/可维护,对吧?我有点困惑,因为代码引用了当前控制器$ scope。
答案 0 :(得分:0)
你提出了一个很好的问题。 AngularJS团队(缺乏)无限智慧创造了一种名为.success
的可怕方法。别用那个马车的东西;请改用.then
。
$http
返回一个承诺,使用它。
在你的工厂:
var httpPromise = $http(url);
return httpPromise;
在您的控制器中,调用承诺的.then
方法。
httpPromiseFromFactory.then(function (response) {
vm.data = response.data;
}) .catch( function(error) {
throw error;
});
有关$http
和.success
方法弃用的详细信息,请参阅最新的AngularJS $http API Docs
有关AngularJS承诺的更多信息,请参阅AngularJS $q Service API Docs。
答案 1 :(得分:0)
这是我最近一直在使用的模式:
GET
调用的通用顶级AJAX服务。POST
和AjaxService
请求方法的中间层服务。此服务会注入DataAccessService
。app.service('AjaxService', function($http) {
return {
request: function(options) {
return $http(options);
}
}
});
。这里是一名掠夺者:http://plnkr.co/edit/o1jUauTLQNLKx3dk6vrZ
<强> AjaxService 强>
app.service('DataAccessService', ['AjaxService', function(AjaxService) {
var _request = function(method, url, data) {
var options = {
method: method,
url: url,
data: data
}
return AjaxService.request(options);
};
return {
get: function(url) {
return _request('GET', url);
},
post: function(url, data) {
return _request('POST', url, data);
}
}
}]);
<强> DataAccessService 强>
app.service('MyCustomService', function(DataAccessService) {
return {
getMyData: function() {
return DataAccessService.get('/mydata');
},
getMyDataPage: function(pageNumber) {
return DataAccessService.get('/mydata/page/' + pageNumber);
},
saveMyData: function(myData) {
return DataAccessService.post('/mydata', myData);
}
}
})
<强> MyCustomService 强>
{{1}}