У меня есть тег <a>
, как показано ниже,
<a [routerLink]="[/Person']">Person</a>
Итак, я хочу передать person.id
этому маршрутизатору /Person
. Как передать его и обработать на @RouteConfig
как params
в Angular 1
У меня есть тег <a>
, как показано ниже,
<a [routerLink]="[/Person']">Person</a>
Итак, я хочу передать person.id
этому маршрутизатору /Person
. Как передать его и обработать на @RouteConfig
как params
в Angular 1
Перейти к ссылке на маршрутизатор:
<a [routerLink]="['/Person', person.id]">Person</a>
Обрабатывать в компоненте:
this.route.params.subscribe(
(params: Params) => {
this.id = params['id'];
}
);
Второй способ:
this.route.params.forEach(
(params: Params) => {
this.id = params['id'];
}
);
В этом примере вы должны ввести ActivatedRoute
(например, как свойство маршрута) следующим образом:
constructor(private route: ActivatedRoute) {}
Если вы подписываетесь - важно отписаться от Observable
чтобы предотвратить утечки памяти.
Полный пример:
export class SimpleComponent implements OnInit, OnDestroy {
private id: number;
private route$: Subscription;
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route$ = this.route.params.subscribe(
(params: Params) => {
this.id = +params['id']; // cast to number
}
);
}
ngOnDestroy() {
if (this.route$) this.route$.unsubscribe();
}
}
Конфиг:
export const routes = [
...
{ path : 'Person/:id', component : ...},
...
];
Кроме того, @RouteConfig
устарела.
Вы можете передать это как
<a [routerLink]="['/Person', propertyWithId]">Person</a>
В моем случае директива [routerLink]
не работала для меня. Итак, я должен был сделать это программно.
Компонентный шаблон:
<a (click)="goToEdit(person.id)" >Edit</a>
Класс компонента:
import { Router } from '@angular/router';
export class PersonComponent{
constructor(private _route: Router){ }
goToEdit(id){
this._route.navigate(['Person/' + id]);
}
}