这是我目前的工厂
.factory('Service',function($http,LOOKUP_ENDPOINT){
'use strict';
var API = {};
API.getcode = function(code){
var args = {
'code': code,
'callback': 'JSON_CALLBACK'
},
params = ('?callback=' + args.callback);
return $http.jsonp(LOOKUP_ENDPOINT + params);
};
return API;
})
然后这是我的控制器我有这样的东西
APIService.getcode($scope.searchQuery)
.success(function(data){
search.result = data;
$location.path("/result");
$scope.search = search;
});
当我从webservice获取返回数据时,我想要添加更多逻辑
即
如果返回数据有结果,则加载某些范围对象&重定向到结果屏幕,如果没有返回数据,则返回错误消息到前端等
在Controller或Factory中拥有所有这些是正常的吗?
答案 0 :(得分:0)
您应该logical part
本身controller
。基本上factory/service
对于控制器的common functionality
非常有用。均值,factory/service
可以在其他控制器中使用。
答案 1 :(得分:0)
好吧,当我们分开关注时,你应该理想地放置你的常见的"服务中的东西和特定的"在控制器中的东西。
考虑到你的问题,我假设你想集中服务中的api调用,但控制器内的逻辑。
你可以这样做:
.factory('Service',function($http,LOOKUP_ENDPOINT){
'use strict';
var API = {};
API.getcode = function(code, successCallbackFunction, failureCallbackFunction){
var args = {
'code': code,
'callback': 'JSON_CALLBACK'
},
var promise = $http.jsonp(LOOKUP_ENDPOINT + params),
promise.success(function(data, status, header, config) {
successCallbackFunction(data);
}),
promise.error(function(data, status, header, config) {
failureCallbackFunction(data, status, header, config);
});
};
return API;
})
并在您的控制器中:
APIService.getcode($scope.searchQuery, function(data) {
//function to execute on success
}, function(data, status, header, config) {
//function to execute on failure
});
答案 2 :(得分:0)
在我看来,良好的做法是使用拦截器from here,并在那里定义load / other_stuff上的错误处理/微调器。您也可以使用自己的$ http服务来通过继承来使代码更加灵活,但这取决于您的项目有多大。