搜索

首页  >  问答  >  正文

angular.js - AngularJS中对Controller与Service进行分层设计与编码

最近看到说在controller中进行数据处理不是很合适,所以就去学习了Controller与Service进行分层设计与编码,参考了http://www.jianshu.com/p/1e1a...,但是我在使用过程遇到的一个问题就是在Service层处理通讯回调,将业务回调传递给Controller层这种方式调用$http服务的时候,如何传递请求参数呢?代码如下:

angular.module('demo')
.service('myService',['$http','$q',function($http,$q){
return {
    getData:function(){
        var deferred = $q.defer();
        var promise = $http.get("xxx");
         promise.then(
                  // 通讯成功的处理
                  function(answer){
                    //在这里可以对返回的数据集做一定的处理,再交由controller进行处理
                    answer.status = true;
                    deferred.resolve(answer);
                  },
                  // 通讯失败的处理
                  function(error){
                    // 可以先对失败的数据集做处理,再交由controller进行处理
                    error.status = false;
                    deferred.reject(error);
                  });
                //返回promise对象,交由controller继续处理成功、失败的业务回调
        return deferred.promise;
    }
}
}]);
黄舟黄舟2744 天前548

全部回复(1)我来回复

  • PHPz

    PHPz2017-05-15 17:10:29

    你的getData可以接收回调函数作为参数,这个回调函数的参数就是你想要传递的数据,然后在你的controller中注入你的这个服务,然后在调用服务的getData方法时把你的其他处理逻辑写到回调函数传给getData方法就行了,你只要在getData中处理完请求的数据后直接调用传入的回调方法,把处理好的参数传入就行了。


    angular.module('demo')
    .service('myService',['$http','$q',function($http,$q){
    return {
        getData:function(callback){
            var deferred = $q.defer();
            var promise = $http.get("xxx");
             promise.then(
                      // 通讯成功的处理
                      function(answer){
                        //在这里可以对返回的数据集做一定的处理,再交由controller进行处理
                        answer.status = true;
                        deferred.resolve(answer);
                        ...//处理数据,得到data
                        callback&&callback(data);
                      },
                      // 通讯失败的处理
                      function(error){
                        // 可以先对失败的数据集做处理,再交由controller进行处理
                        error.status = false;
                        deferred.reject(error);
                      });
                    //返回promise对象,交由controller继续处理成功、失败的业务回调
            return deferred.promise;
        }
    }
    }]);

    回复
    0
  • 取消回复