我正在尝试将params对象传递给$http.get()
服务。我的参数看起来像这样:
var params = {
one: value,
two: value
}
我正试图将它们传递到我的函数中:
$http.get('/someUrl', params)
.success(function(data) {
// stuff
})
.error(function(data) {
// error stuff
});
这是正确的方法吗?
答案 0 :(得分:13)
$http
的第二个参数是 config 对象( see documentation )。在其他属性中, config 对象接受params
属性:
{Object.<string|Object>}
- 将使用paramSerializer序列化并附加为GET参数的字符串或对象的映射。 因此你必须传递参数
var config = {
params: {
one: value,
two: value
}
}
$http.get('/someUrl', config).then(...)
假设参数的值分别为&#39; 1&#39;和&#39; 2&#39;,$http
会向以下网址发送GET请求:
/someUrl?one=1&two=2
作为旁注,请尽量避免在success
上使用error
和$http
函数。从角度1.4.4开始,它们已被弃用。使用方法then
代替成功和错误回调,或者只使用成功回调和catch
。
答案 1 :(得分: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 :(得分: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
});
答案 3 :(得分:1)
$ http documentation表明$ http.get方法的第二个参数是一个可以传递“param”对象的对象。
尝试这样的事情:
$http.get('/someUrl', {params: params})
.success(function(data) {
// stuff
})
.error(function(data) {
// error stuff
});