使用angular2,我想在我的组件中以编程方式打开辅助路径。
此代码打开带有“list”路径的路径,并在正确命名的路由器插座中打开路由,但我不确定如何将参数传递给路径:
this.router.navigate(['./', { outlets: { 'list-outlet': 'list' } }]);
答案 0 :(得分:25)
显示特定产品详细信息的组件的路径需要该产品的ID
的路由参数。我们可以使用以下路由实现这一点:
export const routes: Routes = [
{ path: '', redirectTo: 'product-list', pathMatch: 'full' },
{ path: 'product-list', component: ProductList },
{ path: 'product-details/:id', component: ProductDetails }
];
注意:id
路径中product-details
的路径,该路径将参数放在路径中。例如,要查看包含product-details
5的产品的ID
页面,您必须使用以下网址:localhost:3000/product-details/5
链接到带参数的路径
在ProductList
组件中,您可以显示产品列表。每个产品都会有product-details
路线的链接,并传递产品的ID
:
<a *ngFor="let product of products"
[routerLink]="['/product-details', product.id]">
{{ product.name }}
</a>
请注意,routerLink
指令传递一个数组,该数组指定路径和路径参数。或者,我们可以通过编程方式导航到路线:
goToProductDetails(id) {
this.router.navigate(['/product-details', id]);
}
ProductDetails
组件必须读取参数,然后根据参数中给出的ID
加载产品。
ActivatedRoute服务提供了一个params
Observable,我们可以订阅它来获取路由参数(参见Observables)
import { Component, OnInit, OnDestroy } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'product-details',
template: `
<div>
Showing product details for product: {{id}}
</div>
`,
})
export class LoanDetailsPage implements OnInit, OnDestroy {
id: number;
private sub: any;
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
this.id = +params['id']; // (+) converts string 'id' to a number
// In a real app: dispatch action to load the details here.
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
ActivatedRoute上的params
属性是Observable的原因是路由器在导航到同一组件时可能无法重新创建组件。在这种情况下,参数可能会更改,而不会重新创建组件。
来自here
的信息答案 1 :(得分:14)
最后,我只需要使用数组来传递我的参数...请参阅下面的param1
和param2
。
this.router.navigate(['./', { outlets: { 'list-outlet': ['list', param1, param2]} }]);
注意......我必须更改路由配置中的路径:
{
path: 'list/:param1/:param2',
component: ClaimListComponent,
outlet: 'list-outlet'
}
然后在我的ngOnInit
函数中,我可以像Muirik所说的那样将params拉出路由器。