搜尋

首頁  >  問答  >  主體

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 天前547

全部回覆(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
  • 取消回覆