Yo uso angular2.0.0-beta.7. Cuando un componente se carga en una ruta a la /path?query=value1
que se redirige /path
. ¿Por qué se eliminaron los parámetros GET? ¿Cómo puedo preservar los parámetros?
Tengo un error en los enrutadores. Si tengo una ruta principal como
@RouteConfig([
{
path: '/todos/...',
name: 'TodoMain',
component: TodoMainComponent
}
])
y mi hijo ruta como
@RouteConfig([
{ path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
{ path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])
entonces no puedo obtener parámetros en TodoListComponent. Soy capaz de conseguir
params("/my/path;param1=value1;param2=value2")
pero quiero el clásico
query params("/my/path?param1=value1¶m2=value2")
typescript
angular
FireGM
fuente
fuente
@RouteConfig
para estopath
?Respuestas:
Al inyectar una instancia de
ActivatedRoute
uno, puede suscribirse a una variedad de observables, incluidos ayqueryParams
unparams
observable:UNA NOTA RELATIVA A SUSCRIBIRSE
@Reto y @ codef0rmer habían señalado con razón que, según los documentos oficiales, un método
unsubscribe()
interno de componentesonDestroy()
es innecesario en este caso. Esto ha sido eliminado de mi código de muestra. (Ver cuadro de alerta azul en este tutorial)fuente
The Router manages the observables it provides and localizes the subscriptions. The subscriptions are cleaned up when the component is destroyed, protecting against memory leaks, so we don't need to unsubscribe from the route params Observable.
Cuando una URL como esta http://stackoverflow.com?param1=value
Puede obtener el param1 por código siguiente:
fuente
Aunque la pregunta especifica la versión beta 7 , esta pregunta también aparece como resultado de búsqueda superior en Google para frases comunes como parámetros de consulta angular 2 . Por esa razón, aquí hay una respuesta para el enrutador más nuevo (actualmente en alpha.7 ).
La forma en que se leen los parámetros ha cambiado dramáticamente. Primero necesita inyectar la dependencia llamada
Router
en los parámetros de su constructor como:y después de eso podemos suscribirnos a los parámetros de consulta en nuestro
ngOnInit
método (el constructor también está bien, perongOnInit
debe usarse para la comprobabilidad) comoEn este ejemplo, leemos el ID del parámetro de consulta de URL como
example.com?id=41
.Todavía hay pocas cosas que notar:
params
likeparams['id']
siempre devuelve una cadena , y esta se puede convertir en número con el prefijo+
.fuente
if (params.hasOwnProperty('id')) { this.selectedId = params['id'] } else { this.selectedId = params['identification']}
.Realmente me gustó la respuesta de @ StevePaul, pero podemos hacer lo mismo sin una llamada de suscripción / cancelación de suscripción.
fuente
Para enviar parámetros de consulta
Para recibir parámetros de consulta
Fuente oficial
fuente
Hola, puedes usar URLSearchParams, puedes leer más sobre esto aquí .
importar:
y función:
Aviso : no es compatible con todas las plataformas y parece estar en estado "EXPERIMENTAL" por documentos angulares
fuente
if (window.location.search.indexOf('?') == 0){ normalizedQueryString = window.location.search.substring(1); } else { normalizedQueryString = window.location.search; } let params = new URLSearchParams(normalizedQueryString);
En primer lugar, lo que he encontrado trabajando con Angular2 es que la url con una cadena de consulta sería/path;query=value1
Para acceder a él en un componente que usa So es esto, pero ahora sigue un bloque de código:
En cuanto a por qué se eliminaría cuando cargue el componente, ese no es el comportamiento predeterminado. Verifiqué específicamente en un proyecto de prueba limpio y no fui redirigido ni cambiado. ¿Es una ruta predeterminada o algo más que es especial sobre el enrutamiento?
Lea sobre el enrutamiento con cadenas de consulta y parámetros en el Tutorial de Angular2 en https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters
fuente
Puede obtener los parámetros de consulta cuando se pasa en URL usando ActivatedRoute como se indica a continuación: -
url: - http: /dominio.com? prueba = abc
fuente
Obtener URL param como un objeto.
fuente
Si solo desea obtener el parámetro de consulta una vez, la mejor manera es usar el método take para no tener que preocuparse por la cancelación de la suscripción. Aquí está el fragmento simple: -
Nota: Elimine take (1) si desea usar valores de parámetros en el futuro.
fuente
ahora es:
fuente
Espero que ayude a alguien más.
La pregunta anterior establece que el valor del parámetro de consulta es necesario después de que la página ha sido redirigida y podemos suponer que el valor de la instantánea (la alternativa no observable) sería suficiente.
Nadie aquí mencionó acerca de snapshot.paramMap.get de la documentación oficial .
Entonces, antes de enviarlo, agregue esto en el componente de envío / redireccionamiento:
luego redirija como cualquiera (documentado aquí ):
o simplemente:
Asegúrese de haber agregado esto en su módulo de enrutamiento como se documenta aquí :
Y finalmente, en su componente que necesita usar el parámetro de consulta
agregar importaciones (documentado aquí ):
inyectar ruta activada
(la documentación también importa switchMap y también inyecta Router y HeroService, pero son necesarios solo para una alternativa observable; NO son necesarios cuando se utiliza la alternativa de instantánea como en nuestro caso):
y obtenga el valor que necesita (documentado aquí ):
NOTA: SI AGREGA EL MÓDULO DE ENRUTAMIENTO A UN MÓDULO DE CARACTERÍSTICAS (COMO SE MUESTRA EN LA DOCUMENTACIÓN) ASEGÚRESE DE QUE EN APP.MODULE.ts ESTE MÓDULO DE ENRUTAMIENTO VIENE ANTES de AppRoutingModule (u otro archivo con rutas de aplicación de nivel raíz) EN IMPORTACIONES: []. DE LO CONTRARIO, NO SE ENCONTRARÁN RUTAS DE CARACTERÍSTICAS (COMO LLEGARÍAN DESPUÉS de {ruta: '**', redirigir a: '/ no encontrado'} y solo verá un mensaje no encontrado).
fuente
Solo necesita inyectar ActivatedRoute en el constructor y luego simplemente acceder a los parámetros o queryParams sobre él
En algunos casos, no da nada en NgOnInit ... tal vez debido a la llamada de inicio antes de la inicialización de los parámetros, en este caso puede lograrlo pidiéndole a un observable que espere un tiempo por la función debounceTime (1000)
eg =>
debounceTime () Emite un valor de la fuente observable solo después de un lapso de tiempo particular pasado sin otra emisión de fuente
fuente
No puede obtener un parámetro de RouterState si no está definido en la ruta, por lo que en su ejemplo, debe analizar la cadena de consulta ...
Aquí está el código que usé:
fuente
Consulta y ruta (angular 8)
Si tiene una URL como https://myapp.com/owner/123/show?height=23 , use
ACTUALIZAR
En caso de que use
this.router.navigate([yourUrl]);
y sus parámetros de consulta estén incrustados en unayourUrl
cadena, entonces angular codifica una URL y obtiene algo como esto https://myapp.com/owner/123/show%3Fheight%323 - y la solución anterior dará un resultado incorrecto ( queryParams estará vacío, y los parámetros de consulta se pueden pegar al último parámetro de ruta si está en el extremo de la ruta). En este caso, cambie la forma de navegación a estefuente