工厂或控制器中的Angular Logic用于Web服务返回

时间:2014-12-05 10:00:21

标签: angularjs web-services

这是我目前的工厂

    .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中拥有所有这些是正常的吗?

3 个答案:

答案 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服务来通过继承来使代码更加灵活,但这取决于您的项目有多大。