2017-04-14 46 views
1

我想知道如何在不更改當前活動路線的情況下更新URL中的路徑參數。例如,說我有以下途徑:在不改變活動路線的情況下更改Angular 2中的URL路徑參數

{ 
    path: 'pages/:pageId', 
    component: PageComponent, 
    children: [ 
    { 
     path: 'sections/:sectionId', 
     component: PageSectionComponent, 
     children: [ 
     { 
      path: 'details', 
      component: PageSectionDetailsComponent 
     }] 
    }] 
} 

我試圖解決的問題是,當有人改變:pageId,我想保持自己的活動路線,同時改變URL。所以,如果他們改變:pageId從999到777,他們的路線應該改變來自:

pages/999/sections/123/details => pages/777/sections/123/details 
pages/999/sections/123   => pages/777/sections/123 

此外,我需要做這項工作:sectionId。例如,從:sectionId 123至456導航:

pages/999/sections/123/details => pages/999/sections/456/details 
pages/999/sections/123   => pages/999/sections/456 

有我的項目中的幾個孩子的路線,我省略了,所以絕對鏈接將是非常難以維持。我希望我能以某種方式使用當前的ActivatedRoute,更改我正在更新的單個參數,然後使用Router導航到該路線。

任何幫助,非常感謝!

附加信息:

我採用了棱角分明4.0.0

有一個類似的問題,使程序在覈心的問題我想解決,但它是過時的:Change a single route parameter on the current route in Angular 2

回答

2

您可以在代碼或HTML中更新爲新的必需參數......無論哪個在您的應用程序中最有意義。

在HTML,你會用routerLink指令做:

<a [routerLink]="['/products', product.id]">{{product.productName}}</a> 

或者使用如下代碼:

this.router.navigate(['/products', this.product.id]); 

或與您的例子:

this.router.navigate(['/pages', this.pageId, '/sections', this.sectionId]); 

(我想我第一次誤解了這個問題。)

+0

我不認爲這將適用於我所有的孩子路線。例如,如果我做'this.router.navigate(['/ pages',pageId,'/ sections',sectionId])',那麼'/ pages/999/sections/123/details'將會轉到'/ pages/777/sections/123'而不是'/ pages/777/sections/123/details'。我遇到的問題是如何保持*整個*活動路線,而不用硬編碼我的位置變化。 – SnailCoil

+0

路線如何激活?是否有可能將您的代碼發佈到某處或者提供一個運行程序? – DeborahK

+0

您也可以考慮使用查詢參數而不是所需的參數。這意味着將Ids從路由配置中移除,並將其作爲一組查詢參數傳遞,該參數是具有兩個ID的對象。 – DeborahK

相關問題