关于$ http请求的角度代码优化

时间:2014-10-15 03:27:11

标签: angularjs http

我的代码:

    app.factory('requestData',function($http,$q){
       return {
        reqData:function(params,url){
            return $http.get(url,{"params":params}).then(function(data){
                return data.data
            });
        });

    requestData.reqData( {module:"channel"},'/channel' ).then(function(data){
            $scope.selectChannel = data.value;
        })
     .then(function(){

         requestData.reqData( {channel_id:$scope.selectChannel},'/channel').then(function(data){
             $scope.summary = data.summary;
         })

      })
     .then(function(){
        //use $scope.summary do something
      });

首先,我必须设置" $ scope.selectChannel"异步的价值,然后我使用" $ scope.selectChannel"请求。还有另一种方法可以实现吗?

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

app.factory('RequestData',function($http,$q) {
    var RequestData = {
        // assuming params is an object
        reqData: function(params) {
            $http.post('/channel', params).then(function(response){
                RequestData.selectChannel = response.value;
            });
        }
    };

    return RequestData;
});

在您的控制器中,将RequestData作为依赖项注入,然后设置$scope.RequestData = RequestData,然后您就可以在视图中访问RequestData.selectChannel

答案 1 :(得分:1)

我建议您使用$ resource代替。

.factory("$$service", ["$resource", function ($resource) {
    return $resource('/channel',
        {
            module: "@module",
            channel_id: "@channel_id"
        };
}]);

并以这种方式使用:

var service = new $$service();
service.$get({"module":"channel"})
    .then(function(data){
        return service.$get({"channel_id":data.value});
    })
    .then(function(data){
        $scope.summary = data;
    });