如何以angular2 +编程方式将参数传递给辅助路径?

时间:2017-01-31 23:44:20

标签: angular angular2-routing

使用angular2,我想在我的组件中以编程方式打开辅助路径。

此代码打开带有“list”路径的路径,并在正确命名的路由器插座中打开路由,但我不确定如何将参数传递给路径:

this.router.navigate(['./', { outlets: { 'list-outlet': 'list' } }]);

2 个答案:

答案 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的原因是路由器在导航到同一组件时可能无法重新创建组件。在这种情况下,参数可能会更改,而不会重新创建组件。

Plunkr example

来自here

的信息

答案 1 :(得分:14)

最后,我只需要使用数组来传递我的参数...请参阅下面的param1param2

this.router.navigate(['./', { outlets: { 'list-outlet': ['list', param1, param2]} }]);

注意......我必须更改路由配置中的路径:

{
    path: 'list/:param1/:param2',
    component: ClaimListComponent,
    outlet: 'list-outlet'
}

然后在我的ngOnInit函数中,我可以像Muirik所说的那样将params拉出路由器。