【问题标题】:paramMap item always returns null using Angular 8 routingparamMap 项目总是使用 Angular 8 路由返回 null
【发布时间】:2020-05-08 05:11:12
【问题描述】:

我正在使用 Angular 8 从路由中获取一些参数或数据,但它始终是空的。 我的组件位于名为“消息”的延迟加载模块中。

app-routing.module.ts:

...

{
  path: 'message',
  loadChildren: () =>
    import('./systems/message/message.module').then(
      m => m.MessageModule
    )
},

...

message-routing.module.ts:

...

const routes: Routes = [
  {
    path: '',
    component: MessageIndexComponent,
    children: [{ path: ':folder', component: ComponentMessageListComponent }]
  },
  { path: 'add', component: MessageAddComponent },
  { path: 'list', component: MessageIndexComponent }
];

...

component-message-list.component.ts:

...

constructor(
  private route: ActivatedRoute
) {}

ngOnInit() {
  console.log(this.route.snapshot.paramMap.get('folder'));
   // Change list on date change
  this.route.paramMap.subscribe(params => {
    console.log(params.get('folder'));
  });
}

...

当路由到这个地址时,两个控制台都返回 NULL:

/消息/收件箱

更新:

我通过将地址直接写入浏览器来导航到路线:

http://127.0.0.1:4200/message/inbox

或通过锚标记

message-index.component.html

...

  <a class="list-group-item list-group-item-action d-flex p-3" routerLink="inbox" routerLinkActive="active">
    Inbox
  </a>
...

而且参数总是为空

【问题讨论】:

  • 如何使用数据导航到路线?你能添加那个代码吗?
  • @AmitChigadani 通过在地址栏中写入路线或使用锚标记。我将此添加到问题中
  • 可以分享MessageIndexComponent html代码吗?
  • @Chellappanவ 从该文件添加的锚标记

标签: javascript angular typescript angular2-routing


【解决方案1】:

我必须得到 firstChild 参数而不是父级。预览代码正在返回父级的参数。

此代码有效:

this.route.firstChild.paramMap.subscribe(params => {
    console.log(params.get('folder'));
  });

更新: 问题是我忘记用'router-outlet'替换父组件中的子组件标签,然后子组件在没有路由器的情况下插入父组件!

谢谢大家

【讨论】:

【解决方案2】:

你可以试试这个:

this.router.parseUrl(this.router.url).queryParams[key]

【讨论】:

  • 嗨,这行得通,但我无法解释为什么正常方式行不通。你知道吗?
  • @They_Call_Me_Joe 在您更改路线时订阅是否有效?试试这个:this.route.snapshot.params['folder'] 告诉我它是否有效
猜你喜欢
  • 2021-04-30
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
相关资源
最近更新 更多