2015-09-26 60 views
4

我試圖將params對象傳遞給$http.get()服務。我的PARAMS是這樣的:

var params = { 
    one: value, 
    two: value 
} 

我試圖將它們傳遞到我的功能,像這樣:

$http.get('/someUrl', params) 
.success(function(data) { 
    // stuff 
}) 
.error(function(data) { 
    // error stuff 
}); 

這是正確的方式去這樣做呢?

+0

他們是路徑/查詢參數? – Shikloshi

回答

11

$http第二個參數是一個配置對象(see documentation)。除其他特性,該配置對象接受params屬性:

  • PARAMS - {Object.<string|Object>} - 地圖將與paramSerializer被串行化和所附作爲GET參數串或對象。

因此,你必須傳遞的參數作爲這樣

var config = { 
    params: { 
     one: value, 
     two: value 
    } 
} 

$http.get('/someUrl', config).then(...) 

假設值的參數是分別「1」和「2」,$http將發送GET請求到以下網址:

/someUrl?one=1&two=2 

作爲一個側面說明,儘量避免使用$httpsuccesserror功能。它們從1.4.4角度被棄用。改用方法then,取而代之的是成功和錯誤回調,或者只使用成功回調和catch

+0

這太棒了!謝謝你。 – realph

1

$ http documentation表明$ http.get方法的第二個參數是一個對象,您可以通過它傳遞「param」對象。

嘗試是這樣的:

$http.get('/someUrl', {params: params}) 
.success(function(data) { 
    // stuff 
}) 
.error(function(data) { 
    // error stuff 
}); 
3

服務/廠

對於實際通話使用一個工廠或服務,你可以注入到你需要它的控制器,這是一個例子出廠合格參數

.factory('Chats', function ($http, $rootScope, $stateParams) { 
    return { 
     all: function() { 
      return $http.get('http://ip_address_or_url:3000/chats', { params: { user_id: $rootScope.session } }) 
     } 
    }; 
}); 

控制器

在你續輥使用服務這樣

.controller('ChatsCtrl', function ($scope, Chats) { 
    Chats.all().success(function (response) { 
     $scope.chats = response; 
    }) 
}) 
2

我已經在最近的時間遇到​​了類似的問題,我不得不一些額外的細節添加到請求(我用的接受了一些頭回答):

$http.get(url, { 
    params: { 
     paramOne: valueOne, 
     paramTwo: valueTwo, 
     ... 
    }, 
    headers: { 
     'key': 'value' 
    }, 
    // responseType was required in my case as I was basically 
    // retrieving PDf document using this REST endpoint 
    // This is not required in your case, 
    // keeping it for somebody else's reference 
    responseType: 'arraybuffer' 
}).success(
    function(data, status, headers, config) { 
     // do some stuff here with data 
    }).error(function(data) { 
     // do some stuff here with data 
});