0

我有一个组件before-adetail,它有一个到另一个组件a-detail的链接,它又有一个到a-review的链接,它又有一个到a-confirm的链接。

所以流程是before-adetail -> a-detail -> a-review -> a-confirm

before-adetail.component.html

<p>before-adetail works!</p>
<a routerLink="/detail">A-detail</a>

一个细节

<p>a-detail works!</p>
<a routerLink="/review">A-review</a>

评论

<p>a-review works!</p>
<a routerLink="/confirm">A-confirm</a>

一确认

<p>a-confirm works!</p>

因此,当我第一次运行应用程序时,新选项卡会存储在历史记录中。假设我在 localhost:4200 上运行应用程序。然后,当我单击before-adetail中的链接时,这也会存储在历史记录中,依此类推。

如果我从a-review页面按下浏览器后退按钮,它会返回到a-detail页面,如果我再次按下后退按钮,它会转到before-adetail

但我想要实现的是,如果我访问了a-review并按下后退按钮,它应该转到详细信息,当我再次按下时,它不应该转到详细信息之前,而是历史记录中之前的任何页面。

仅当我访问过评论页面时,我才需要此功能,如果我没有,它应该以正常的方式工作。

我如何实现这一目标?

我现在尝试过的:a-review.component.ts内部

location.onPopState(() => {
      const temporaryUrl = window.location.href;
      const url = temporaryUrl.replace('/review', '/detail');
      history.pushState('a-review', '', url);
    });
  }

通过a-review知道浏览器返回已经从a-review页面被点击

a-detail.component.ts里面

location.onPopState(() => {
      if (history.state === 'a-review') {
        history.go(-2);
      }
    });
  }

这确实实现了我想要做的事情,但是对于像 1 秒或 2 秒这样的瞬间,即使是之前的细节页面也是可见的,这是我不想要的。

有什么方法可以改善这一点或有什么其他更好的方法来做到这一点?谢谢。

4

1 回答 1

-1

我建议你使用 replaceUrl

<p>a-review works!</p>
<a routerLink="/confirm" [replaceUrl]="true">A-confirm</a>

它的作用是当您单击“A-confirm”时,当前历史状态('/review' 路径)将被替换为 '/confirm' 之一。和“返回”按钮将直接带您回到“/详细信息”

于 2021-09-26T12:50:38.767 回答