paramMap的Angular 4订阅不与子插座一起工作

paramMap的Angular 4订阅不与子插座一起工作,angular,routes,Angular,Routes,在我们的Angular 4应用程序中我们有一个合同列表的下拉列表 一旦用户选择了一个合约,我们就会触发一个路由器。导航,用所选的合约更改url,并用它发出http请求 其实很简单: this.activatedRoute.paramMap.subscribe(…带有收缩的请求…) 这适用于平坦路线 但在有孩子的路线上,它不起作用,例如,对于这条路线: export const customerRoutes: Routes = [ { path: ":contractId/Customer

在我们的
Angular 4应用程序中
我们有一个合同列表的下拉列表

一旦用户选择了一个合约,我们就会触发一个
路由器。导航
,用所选的
合约
更改url,并用它发出
http请求

其实很简单:

this.activatedRoute.paramMap.subscribe(…带有收缩的请求…)

这适用于平坦路线

但在有孩子的路线上,它不起作用,例如,对于这条路线:

export const customerRoutes: Routes = [
{
    path: ":contractId/Customers",
    component: CustomersComponent,
    children: [
        { path: "", redirectTo: "Children", pathMatch: "full" },
        { path: "Children", component: ChildrenComponent }
    ]
  }
];
上面的路线为我提供了以下URL:
http://localhost:4033/20917/Customers/Children

现在让我们假设我想在下拉列表中选择一个新合同

…这是下拉列表的
onChange

public onChange(contract: Contract): void {
  this.router.navigate([contract.id, window.location.pathname.split("/")[3]]);
}
其中
window.location.pathname.split(“/”[3]
提供给我:客户


url已更改为
http://localhost:4033/33444/Customers/Children
,但尚未点击订阅。为什么?

要监视父组件的更改事件,我们需要显式调用:

this.activatedRoute.parent.paramMap.subscribe(…带有收缩的请求…)


这不在文档中,我已经为此创建了一个请求:

此代码在哪里:
This.activatedRoute.paramMap.subscribe(…带有收缩的请求…
?它将仅拾取与组件关联的管线的更改。因此,要拾取
子项
路由更改,此代码需要位于
子项
组件中。是这样吗?谢谢@DeborahK-是的,就是这样-订阅者在children组件中。用plunker复制这个应该很容易。我会试试看……我可以在DeborahK解决这个问题,这很有趣。我在网上没有看到太多关于这方面的内容。我还尝试了pluralsight课程,但没有包括在内。当您在子组件中并且希望通过订阅访问父组件的参数时,需要使用:
this.activatedRoute.parent.paramMap…
,然后它就可以工作了。我会给你一个答案和一个劫掠者的链接,很高兴你找到了答案。我确实在Pluralsight上的
角度路由
课程中讨论了激活路由的.parent属性,但是关于观察数据属性。这在概念上是相似的。看起来你解决了这个问题。。我问我为什么?我现在有一个类似的问题,但仍然没有找到解决方案。这是一个文档和功能的请求,而不是一个问题。给出了解决方案above@DAG您可以演示如何使用pipe()操作符执行此操作吗?你不能再使用.map了,因为angular 6。我试着像这样重新创建您在plunkr中所做的:`this.activatedRoute.parent.paramMap.pipe(map(m=>m.get(“construcd”)),distinctUntilChanged((previous:any,current:any)=>{return true})).subscribe(),`但它不起作用。