繁体   English   中英

Angular:将params传递给$ http.get

[英]Angular: Pass params to $http.get

我正在尝试将params对象传递给$http.get()服务。 我的参数看起来像这样:

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

而我正试图将它们传递到我的函数中:

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

这是正确的方法吗?

$http的第二个参数是一个配置对象( 参见文档 )。 在其他属性中, config对象接受params属性:

  • params - {Object.<string|Object>} - 将使用paramSerializer序列化并作为GET参数附加的字符串或对象的映射。

因此,您必须传递参数

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

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

假设参数的值分别为'1'和'2', $http将向以下url发送GET请求:

/someUrl?one=1&two=2

作为旁注,尽量避免在$http上使用successerror函数。 从角度1.4.4开始,它们已被弃用。 then使用方法成功和错误回调,或者只使用成功回调和catch

服务/工厂

对于实际呼叫,请使用可以注入所需控制器的工厂或服务。这是一个工厂传递参数的示例

.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;
    })
})

我最近遇到过类似的问题,我不得不添加一些额外的细节来请求(我使用了一些标题的接受答案):

$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
});

$ http 文档表明$ http.get方法的第二个参数是一个可以传递“param”对象的对象。

尝试这样的事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM