Yo uso angular2.0.0-beta.7. Cuando un componente se carga en una ruta como /path?query=value1 , se redirige a /path . ¿Por qué se eliminaron los parámetros GET? ¿Cómo puedo conservar los parámetros?
Tengo un error en los routers. 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 yo quiero el clasico
query params("/my/path?param1=value1¶m2=value2")Al inyectar una instancia de ActivatedRoute , uno puede suscribirse a una variedad de observables, incluidos queryParams y params observables:
import {Router, ActivatedRoute, Params} from '@angular/router'; import {OnInit, Component} from '@angular/core'; @Component({...}) export class MyComponent implements OnInit { constructor(private activatedRoute: ActivatedRoute) {} ngOnInit() { // Note: Below 'queryParams' can be replaced with 'params' depending on your requirements this.activatedRoute.queryParams.subscribe(params => { const userId = params['userId']; console.log(userId); }); } }UNA NOTA SOBRE LA BAJA DE SUSCRIPCIÓN
@Reto y @codef0rmer habían señalado con toda razón que, según los documentos oficiales, en este caso no es necesario cancelar la unsubscribe() dentro del método onDestroy() de los componentes. Esto ha sido eliminado de mi ejemplo de código. (vea el cuadro de alerta azul en este tutorial)
Cuando una URL es así http://stackoverflow.com?param1=value
Puede obtener el parámetro 1 con el siguiente código:
import { Component, OnInit } from '@angular/core'; import { Router, ActivatedRoute, Params } from '@angular/router'; @Component({ selector: '', templateUrl: './abc.html', styleUrls: ['./abc.less'] }) export class AbcComponent implements OnInit { constructor(private route: ActivatedRoute) { } ngOnInit() { // get param let param1 = this.route.snapshot.queryParams["param1"]; } }Aunque la pregunta especifica la versión beta 7 , esta pregunta también aparece como el principal resultado de búsqueda en Google para frases comunes como parámetros de consulta angulares 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 drásticamente. Primero necesita inyectar una dependencia llamada Router en los parámetros de su constructor como:
constructor(private router: Router) { } y después de eso, podemos suscribirnos a los parámetros de consulta en nuestro método ngOnInit (el constructor también está bien, pero ngOnInit debe usarse para la capacidad de prueba) como
this.router .routerState .queryParams .subscribe(params => { this.selectedId = +params['id']; }); En este ejemplo, leemos el ID de parámetro de consulta de una URL como example.com?id=41 .
Todavía hay algunas cosas que notar:
params como params['id'] siempre devuelve una cadena , y esto se puede convertir en un número prefijándolo con + .