Estoy usando angular 5.0.3, me gustaría iniciar mi aplicación con un montón de parámetros de consulta como /app?param1=hallo¶m2=123
. ¿Cada consejo dado en Cómo obtener parámetros de consulta de url en Angular 2? no funciona para mi
¿Alguna idea de cómo hacer funcionar los parámetros de consulta?
private getQueryParameter(key: string): string {
const parameters = new URLSearchParams(window.location.search);
return parameters.get(key);
}
Esta función privada me ayuda a obtener mis parámetros, pero no creo que sea la forma correcta en un nuevo entorno angular.
[actualización:] Mi aplicación principal se ve así
@Component({...})
export class AppComponent implements OnInit {
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
// would like to get query parameters here...
// this.route...
}
}
Respuestas:
En Angular 5, se accede a los parámetros de consulta suscribiéndose a
this.route.queryParams
.Ejemplo:
/app?param1=hallo¶m2=123
mientras que las variables de ruta son accedidas por
this.route.snapshot.params
Ejemplo:
/param1/:param1/param2/:param2
fuente
Esta es la solución más limpia para mí.
fuente
Sé que OP solicitó la solución Angular 5, pero aún así para todos ustedes que se topan con esta pregunta para las versiones angulares más nuevas (6+). Citando los documentos , con respecto a ActivatedRoute.queryParams (en los que se basan la mayoría de las otras respuestas):
Según los documentos , la forma simple de obtener los parámetros de consulta se vería así:
Para formas más avanzadas (por ejemplo, reutilización avanzada de componentes), consulte este capítulo de Documentos.
EDITAR:
Como se indicó correctamente en los comentarios a continuación, esta respuesta es incorrecta, al menos para el caso especificado por OP.
OP solicita obtener parámetros de consulta globales (/ app? Param1 = hallo & param2 = 123); en este caso, debe usar queryParamMap (al igual que en la respuesta @ dapperdan1985).
paramMap, por otro lado, se usa en parámetros específicos de la ruta (por ejemplo, / app /: param1 /: param2, lo que resulta en / app / hallo / 123).
Gracias a @JasonRoyle y @daka por señalarlo.
fuente
queryParamMap
noparamMap
para buscar parámetros de cadena de consulta?paramMap
no funciona.También puede usar HttpParams , como:
fuente
path: '', redirectTo: '/list'
. La this.route.snapshot no funciona para mí porque redirige a / list que elimina la cadena de consulta 'lang'. Pero esta solución funciona para mí.ACTUALIZAR
fuente
es trabajo para mi:
mira más opciones ¿Cómo obtener parámetros de consulta de url en angular2?
fuente
Parámetros de consulta y ruta (angular 8)
Para url como https://myapp.com/user/666/read?age=23 use
ACTUALIZAR
En caso de que use
this.router.navigate([someUrl]);
y sus parámetros de consulta estén incrustados en unasomeUrl
cadena, entonces angular codifica una URL y obtendrá algo como esto https://myapp.com/user/666/read%3Fage%323 - y la solución anterior dará un resultado incorrecto ( queryParams estará vacío, y los parámetros de ruta se pueden pegar al último parámetro de ruta si está al final de la ruta). En este caso, cambie la forma de navegación a estefuente
Tropecé con esta pregunta cuando estaba buscando una solución similar, pero no necesitaba nada como enrutamiento de nivel de aplicación completo o más módulos importados.
El siguiente código funciona muy bien para mi uso y no requiere módulos adicionales o importaciones.
http://localhost:4200/?param1=hello¶m2=123
salidas:fuente
Angular Router proporciona el método parseUrl (url: string) que analiza url en UrlTree . Una de las propiedades de UrlTree son queryParams. Entonces puedes hacer algo como:
fuente
Desafortunadamente, la solución más limpia no es la solución más extensible. En versiones recientes de Angular, se sugiere en las otras respuestas que puede obtener fácilmente los parámetros de consulta utilizando el Inyectable ActivatedRoute y utilizando específicamente la propiedad de instantánea:
o la propiedad de suscripción (utilizada en los casos en que la cadena de consulta se actualizará, por ejemplo, navegando por los ID de usuario):
Estoy aquí para decirles que estas soluciones tienen una falla enorme que no se ha resuelto por algún tiempo: https://github.com/angular/angular/issues/12157
Con todo, la única solución a prueba de balas es usar un buen JavaScript antiguo de vainilla. En este caso, creé un servicio para la manipulación de URL:
fuente
Cuando tiene un objeto de ruta vacío, se debe principalmente al hecho de que no está utilizando una salida de enrutador en su app.component.html.
Sin esto, no podrá obtener un objeto de ruta significativo con subObjetos no vacíos, particularmente params y queryParams.
Intenta agregar
<router-outlet><router-outlet>
justo antes de llamar a tu<app-main-component></app-main-component>
Antes de eso, asegúrese de tener su parámetro de consulta listo en el enrutamiento de aplicaciones> que exporta la clase Ruta utilizada por el componente Aplicación:
Lo último, por supuesto, para obtener su parámetro, yo personalmente uso
this.route.snapshot.params.dynamicParam
donde dynamicParam es el nombre utilizado en su componente de enrutamiento de aplicaciones :)fuente
Ten cuidado con tus rutas. Un "redirectTo" eliminará | colocará cualquier parámetro de consulta.
Llamé a mi componente principal con parámetros de consulta como "/ main? Param1 = a & param2 = by supongo que mis parámetros de consulta llegan al método" ngOnInit () "en el componente principal antes de que el reenvío de redireccionamiento surta efecto.
Pero esto está mal. La redirección vendrá antes, descarte los parámetros de consulta y llame al método ngOnInit () en el componente principal sin parámetros de consulta.
Cambié la tercera línea de mis rutas a
y ahora mis parámetros de consulta son accesibles en los componentes principales ngOnInit y también en PageOneComponent.
fuente
Se encuentra en: Los componentes principales obtienen parámetros vacíos de ActivatedRoute
Trabajó para mi:
fuente
Simplemente tropecé con el mismo problema y la mayoría de las respuestas aquí parecen resolverlo solo para el enrutamiento interno angular, y luego algunos de ellos para parámetros de ruta que no son lo mismo que los parámetros de solicitud.
Supongo que tengo un caso de uso similar a la pregunta original de Lars.
Para mí, el caso de uso es, por ejemplo, el seguimiento de referencias:
Angular funcionando
mycoolpage.com
, con enrutamiento hash, por lo quemycoolpage.com
redirige amycoolpage.com/#/
. Para referencia, sin embargo, un enlace comomycoolpage.com?referrer=foo
también debería ser utilizable. Desafortunadamente, Angular elimina inmediatamente los parámetros de solicitud, yendo directamente amycoolpage.com/#/
.Cualquier tipo de 'truco' con el uso de un componente vacío + AuthGuard y obtener
queryParams
oqueryParamMap
, desafortunadamente, no funcionó para mí. Siempre estaban vacíos.Mi solución hacky terminó siendo manejar esto en un pequeño script en el
index.html
que se obtiene la URL completa, con los parámetros de solicitud. Luego obtengo el valor de parámetro de solicitud a través de la manipulación de cadenas y lo configuro en un objeto de ventana. Un servicio separado se encarga de obtener la identificación del objeto de la ventana.script index.html
Servicio
fuente
fuente
http: // localhost: 4200 / products? order = popular
Podemos acceder al parámetro de consulta de pedido de esta manera:
También hay queryParamMap, que devuelve un observable con un objeto paramMap.
Dada la siguiente ruta URL:
http: // localhost: 4200 / products? order = popular & filter = new
Fuente: https://alligator.io/angular/query-parameters/
fuente
En, creo que Angular 8:
ActivatedRoute.params
ha sido reemplazado porActivatedRoute.paramMap
ActivatedRoute.queryParams
ha sido reemplazado porActivatedRoute.queryParamMap
fuente
fuente
Si no está utilizando el enrutador angular, intente con la cadena de consulta . Instalarlo
a su proyecto En tu componente haz algo como esto
El
substring(1)
es necesaria porque si tiene algo como esto'/mypage?foo=bar'
entonces el nombre clave para será?foo
fuente