最近看到說在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;
}
}
}]);
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;
}
}
}]);