【问题标题】:angular factory .success and .error functions角度工厂 .success 和 .error 函数
【发布时间】:2015-07-27 17:02:32
【问题描述】:

我是 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;
                });
        }

    });
})();

我应该如何在控制器中处理这个问题?

【问题讨论】:

    标签: javascript angularjs http factory


    【解决方案1】:

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

    编辑: 此规则的例外情况是,如果错误和成功处理将根据使用服务的控制器完全不同,但我从未发现对我来说是这种情况。

    【讨论】:

      【解决方案2】:

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

      关注点分离。 :)

      【讨论】:

        【解决方案3】:

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

        第一种方法

        这很简单。只有当您完全控制$http 响应中可用的所有方面(如数据、标头、状态和配置)时,您才应该采用这种方法

        第二种方法

        通过使用这种方法,您可以在您的 callee 方法和服务之间创建一个抽象层,它将从服务返回数据,响应的其他部分将为 callee 方法隐藏。此外,您可以在这里做一些数据操作操作有时您还可以在返回数据之前进行验证,您可以根据条件解决或拒绝承诺。

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

        【讨论】:

        • @user2950720 你看过我的回答了吗?
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-09
          • 2013-08-16
          • 1970-01-01
          相关资源
          最近更新 更多