He estado buscando una manera de pasar consulta parámetros en una llamada a la API con el nuevo HttpClientModule
's HttpClient
, y todavía tengo que encontrar una solución. Con el antiguo Http
módulo escribirías algo como esto.
getNamespaceLogs(logNamespace) {
// Setup log namespace query parameter
let params = new URLSearchParams();
params.set('logNamespace', logNamespace);
this._Http.get(`${API_URL}/api/v1/data/logs`, { search: params })
}
Esto resultaría en una llamada API a la siguiente URL:
localhost:3001/api/v1/data/logs?logNamespace=somelogsnamespace
Sin embargo, el nuevo HttpClient
get()
método no tiene una search
propiedad, por lo que me pregunto dónde pasar los parámetros de consulta.
angular
typescript
http
lodash
angular-httpclient
joshrathke
fuente
fuente
this.httpClient.get(url, { params }
Consulte stackoverflow.com/a/54211610/5042169Respuestas:
Terminé encontrándolo a través de IntelliSense en la
get()
función. Entonces, lo publicaré aquí para cualquiera que esté buscando información similar.De todos modos, la sintaxis es casi idéntica, pero ligeramente diferente. En lugar de usar
URLSearchParams()
los parámetros, debe inicializarse comoHttpParams()
yget()
ahora se llama a la propiedad dentro de la función enparams
lugar desearch
.De hecho, prefiero esta sintaxis ya que es un poco más agnóstico de parámetros. También refactoricé el código para hacerlo un poco más abreviado.
Parámetros Múltiples
La mejor manera que he encontrado hasta ahora es definir un
Params
objeto con todos los parámetros que quiero definir definidos dentro. Como @estus señaló en el comentario a continuación, hay muchas respuestas excelentes en esta pregunta sobre cómo asignar múltiples parámetros.Parámetros múltiples con lógica condicional
Otra cosa que a menudo hago con múltiples parámetros es permitir el uso de múltiples parámetros sin requerir su presencia en cada llamada. Con Lodash, es bastante simple agregar / eliminar condicionalmente los parámetros de las llamadas a la API. Las funciones exactas utilizadas en Lodash o Underscores, o vanilla JS pueden variar según su aplicación, pero descubrí que verificar la definición de propiedad funciona bastante bien. La siguiente función solo pasará parámetros que tengan propiedades correspondientes dentro de la variable de parámetros pasada a la función.
fuente
let params = new HttpParams(); params.set(...)
No funcionará como se esperaba. Ver stackoverflow.com/questions/45459532/…new HttpParams({fromObject: { param1: 'value1', ... }});
es el enfoque más fácil (angular 5+) entoncesparams.set(...)
.Puede (en la versión 5+) usar los parámetros del constructor fromObject y fromString al crear HttpParamaters para facilitar las cosas
o:
fuente
const params = {'key': 'value'}
a:http.get('/get/url', { params: params })
Puedes pasarlo así
fuente
params
Una solución más concisa:
fuente
Con Angular 7, lo hice funcionar usando lo siguiente sin usar HttpParams.
fuente
Si tiene un objeto que se puede convertir en
{key: 'stringValue'}
pares, puede usar este acceso directo para convertirlo:¡Me encanta la sintaxis extendida!
fuente
joshrathke tiene razón.
En angular.io docs está escrito que URLSearchParams de @ angular / http está en desuso . En su lugar, debe usar HttpParams de @ angular / common / http . El código es bastante similar e idéntico a lo que joshrathke ha escrito. Para múltiples parámetros que se guardan, por ejemplo, en un objeto como
también podrías hacer
Si necesita propiedades heredadas, elimine hasOwnProperty en consecuencia.
fuente
la propiedad de búsqueda de tipo URLSearchParams en la clase RequestOptions está en desuso en angular 4. En su lugar, debe usar la propiedad params de tipo URLSearchParams .
fuente