angular 工厂.success 和.error 函数

angular factory .success and .error functions

我是 angular 的新手,我想知道将 .success.error 函数放置在控制器内还是工厂内的最佳实践是什么?示例:

我用这个吗:

(function(){
    'use strict';

    angular
    .factory('apiService', function($http){
        var apiService = {
            getProfileData: getProfileData
        }

        return apiService;

        function getProfileData(url){
            return $http.jsonp(url);
        }

    });
})();

或者这个:

(function(){
    'use strict';

    angular
    .factory('apiService', function($http){
        var apiService = {
            getProfileData: getProfileData
        }

        return apiService;

        function getProfileData(url){
            return $http.jsonp(url)
                .success(function(data){
                    return data;
                })
                .error(function(err){
                    return err;
                });
        }

    });
})();

我应该如何在控制器中处理它?

您绝对应该选择您发布的第二个选项并在服务中进行处理。服务应该是可重用的,因此如果错误处理没有在其中完成,则必须在使用它的每个控制器中完成。

编辑: 此规则的例外情况是错误和成功处理是否完全不同,具体取决于使用该服务的控制器,但我从未发现这种情况对我来说是这样。

我建议将它放在 service/factory 中。控制器不需要了解通信实现(您将来可能想要模拟)。

关注点分离。 :)

这两种方法都是正确的,但取决于您希望如何公开 API。

第一种方法

很简单。仅当您完全控制 $http 响应中可用的所有方面(如数据、header、状态和配置

时,才应采用这种方法

第二种方法

通过使用这种方法,您可以在 callee 方法和服务之间创建一个抽象层,它将 return 来自服务的数据,响应的其他部分将为 callee method.Also 在这里你可以做一些数据操作操作有时你也可以在 returning 数据之前进行验证 & 你可以根据条件解决或拒绝承诺。

我建议您采用第二种方法,这样您就可以在return将数据传递给被调用方方法之前获得更多数据访问权限。

你应该选择第二个选项,但是 .success return 一个承诺但是提供了稍微更方便的语法,其中 .then 是承诺的全部力量 API 但是稍微更冗长,所以尽管使用了 .success 我建议你更喜欢 .then.