问题描述
最近看到说在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; }}}]);
问题解答
回答1:你的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; }}}]);