Angular Ionic 4角路由器导航并清除上一页的堆栈/历史记录

Angular Ionic 4角路由器导航并清除上一页的堆栈/历史记录,angular,ionic-framework,ionic4,angular-router,Angular,Ionic Framework,Ionic4,Angular Router,我正在开发一个应用程序,使用离子4和角度路由器。我想导航到另一个页面并清除页面堆栈。在Android native中,是这样的: Intent intent = new Intent(NewActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); onLogin() { this.router.navigateByUrl('/pro

我正在开发一个应用程序,使用离子4和角度路由器。我想导航到另一个页面并清除页面堆栈。在Android native中,是这样的:

Intent intent = new Intent(NewActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
onLogin() {
   this.router.navigateByUrl('/profile', { replaceUrl: true }) 
}
从我目前所读到的内容来看,可以使用
Ionic NavController
,但它在Ionic 4中被弃用。我用
routerLink
了解了一些按钮,但如果我没有弄错的话,通过使用这些按钮,应用程序将立即导航到另一个页面。在导航到另一个页面之前,我需要执行一些逻辑

例如:登录页面。成功登录后,用户将无法返回登录页面。此外,通过单击“登录”按钮,它应该调用一个函数来处理登录并决定导航/不导航到另一个页面

有什么方法可以通过Angular router实现这一点,或者我需要依赖弃用的Ionic NavController吗

this.router.navigateByUrl('/login', { skipLocationChange: true });
导航时不会将新状态推入历史


例如登录页面,它是一个根页面(“/login”),单击登录按钮后,导航到一个新页面,如下所示:

Intent intent = new Intent(NewActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
onLogin() {
   this.router.navigateByUrl('/profile', { replaceUrl: true }) 
}
它用一个新的URL替换页面历史记录条目,在本例中为
“/profile”
。使用普通的
或浏览器的后退按钮后,您将不会被重定向到登录页面,而是被重定向到上一页。假设您的页面导航是这样的:主页->登录->配置文件,但历史记录只会记住主页->配置文件,因此点击配置文件页面上的后退按钮将带您返回主页


对于完整的解决方案,您可以将其与角度路由保护相结合,以防止基于某些条件(例如用户已登录)访问页面。如何做的提示可以在中找到。

我不得不跪在
NavController
上解决这个问题。它还没有完全弃用,您仍然可以使用它。或者您可以使用
ionViewWillLeave()
清空堆栈。@Najamussakib我想在我找到Angular router的解决方案之前,我现在只使用
NavController
,它在浏览器上工作,但在部署到设备上时不工作。我想知道为什么。。不过我需要它在设备上工作。更新:它实际上可以工作,但不能在根页面上工作。假设登录页面是我的根页面&我正在从登录页面导航到主页,它不会工作。登录页面仍将在历史记录中。skipLocationChange未在历史记录中添加目标页面。如果您想使用
replaceUrl
删除历史记录中的当前页面并替换为下一个页面,或者使用
skipLocationChange
,这是上下文的问题。skipLocationChange if great if you know you knowing to a transient page(例如显示no be navigated back的教程屏幕,或将自动重定向的确认屏幕)。
replaceUrl
如果您位于不应再导航回的登录页面(如成功登录后)上,则非常棒。我的条件是,假设我在X页面,在某些情况下,我使用navigateByUrl导航到Y页面。现在从Y页开始,如果我点击后退按钮,我不应该进入X页。我一定要去另一页。我有一个像clear navigation stack这样的想法,并通过编程将页面添加到堆栈中,但我没有找到任何相关资料。你能建议点什么吗?