ionic 4 + angular: routerLink 只在第一次工作

ionic 4 + angular: routerLink only works first time

我现在在从头开发基本应用程序时遇到了一个奇怪的错误。 我使用 Ionic 4 beta 19 并将 routerLink 放到另一个页面,路由在基页模块中设置如下:

RouterModule.forChild([
  { path: '', component: NewsPage },
  { path: ':id', component: DetailPage }
])

routerLink 属性设置在卡片上,点击卡片时它工作正常,但当我返回并按下同一张卡片或另一张卡片时,路由器根本不做任何事情。我没有收到任何错误,浏览器中的 URL 运行正常。怎么会这样?

编辑:另外,DetailPage 没有模块,所以它基本上只是一个页面。

编辑:卡片代码如下所示:

<ion-card *ngFor="let item of items;" [routerLink]="[item.id]">
  ...
</ion-card>

在详情页面中,路由参数被订阅,:id 参数将用于 GET 请求订阅以检索数据

通过使用 navigateByUrl 解决了这个问题,而不是像这样:

open(id: number) {
  this.router.navigateByUrl(this.router.url + '/' + id);
}

对于卡片:

<ion-card *ngFor="let item of items;" (click)="open(item.id)">
    ...
</ion-card>

仍然不知道为什么会这样,但这是目前的解决方法。

这是一个已知错误。您可以在此处找到 GitHub 问题:https://github.com/ionic-team/ionic/issues/16534

正如@mario 上面提到的,绝对链接将适用于 routerLink。请参阅此处的评论:https://github.com/ionic-team/ionic/issues/16534#issuecomment-444610330

这已经修复,只需 运行 npm i @ionic/angular 更新到修复版本 4.2.0 或更高版本。

这也影响了 router.navigate(['url', params]) 功能

您可以通过 运行
修复此错误 npm i @ionic/angular

如果可能,解决方法是使用绝对路径而不是 this github answer 中所述的相对路径:

I will leave this issue open, and we will try to fix, but it's far from trivial and using absolute paths is a good workaround!

We are aware of this issue :)

所以你将拥有:

<ion-item routerLink="/home" />

而不是:

<ion-item routerLink="home" />