我有一个组件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 秒这样的瞬间,即使是之前的细节页面也是可见的,这是我不想要的。
有什么方法可以改善这一点或有什么其他更好的方法来做到这一点?谢谢。