Javascript 如何在Angular中更新上一页URL
问题:如何从历史记录中删除以前的路由Javascript 如何在Angular中更新上一页URL,javascript,angular,typescript,Javascript,Angular,Typescript,问题:如何从历史记录中删除以前的路由url,以便浏览器“返回”按钮跳过它 在我的应用程序中,如果数据无效或存在其他问题-Angular执行重定向到错误页面。但若要在浏览器中按“后退”,用户将再次被重定向到错误页面,并从错误页面转到错误页面。所以这是一种无休止的循环 这样做的目的是从历史记录中删除以前的url(包含无效数据),这样以前的重定向将导致指向包含无效数据的url之前的页面 我们有一些browser.locationapi在香草JS中,但是如何通过Angular的方式来实现呢 更新:有很多
url
,以便浏览器“返回”按钮跳过它
在我的应用程序中,如果数据无效或存在其他问题-Angular
执行重定向到错误页面。但若要在浏览器中按“后退”,用户将再次被重定向到错误页面,并从错误页面转到错误页面。所以这是一种无休止的循环
这样做的目的是从历史记录中删除以前的url
(包含无效数据),这样以前的重定向将导致指向包含无效数据的url
之前的页面
我们有一些browser.location
api在香草JS
中,但是如何通过Angular
的方式来实现呢
更新:有很多方法可以获取以前的url,如:。但是如何设置呢
解决方案:我尝试使用Angular
Location.replaceState()
来覆盖
历史出于某种原因,它只是删除了一个历史记录条目,而没有替换它:
类似的行为出现在vanilla JS
History.replaceState()
:
我最终改变了设计,在NavigationExtras
中使用skipLocationChange:true
:
因此,巴林特·雷西的答案最合适。您需要使用导航选项。当您得到一个导航到错误页面的错误时,应该使用NavigationExtras来实现。您可以在那里定义skipLocationChange或replaceUrl
- skipLocationChange在导航时跳过以将状态推入历史 变化
- replaceUrl重新定义历史记录中的当前状态
this.router.navigate(['/error'], { replaceUrl: true });
文档参考:Angular route guard CanActivate方法将帮助您解决我们的问题,当用户从一个屏幕导航或尝试从一个屏幕导航到另一个屏幕时,它将触发。它还将为您提供下一个url路由,您可以根据自己的需求轻松操作这些路由。您只需在提供程序中包含route guard并实现CanActivate route guard 步骤1-实现CanActivate接口
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
@Injectable({
providedIn: 'root',
})
export class AuthGuard implements CanActivate {
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
// here you can write you logic example-> you can navigate to some where else protect navigation
console.log('AuthGuard#canActivate called');
return true;
}
}
第2步->告诉你的路线表你有一个守卫来保护你的路线:p
import { AuthGuard } from '../auth/auth.guard';
const adminRoutes: Routes = [
{ path: 'crises', component: ManageCrisesComponent },
{ path: 'admin', component: AdminComponent, canActivate: [AuthGuard]} // -->your Auth guard will get register here
];
有关更多帮助,请参阅-
对我来说,后退按钮是浏览器和用户的问题。 我将解释我自己,如果用户想回去,你应该让他们回去,这对我来说是正确的方式,通常的流程和应该如何做 但为了实现这一点,您可以这样做:
this.router.navigate(['/error'], { replaceUrl: true });
在错误页面中,您可以使用history.pushState文档:
请试着把你的问题排好顺序,因为很难理解你想要完成什么。更好地描述上下文,稍微描述一下任务是什么以及您试图实现什么,描述问题,并发布一些示例代码或plunkr/stackblitz/snippet@ZetaPR,我已经更新了一个问题,是否更清楚youskipLocationChange不适合我,因为在重定向时,我不知道url包含无效数据。我想应该是因为它替换了无效状态。因此,当用户按back时,它将返回到上一个右url状态。;)导航一切正常。问题在第三部分。若要从三个url中删除以前的url,则在浏览器中按“后退”键,用户将不会跳转到以前的url,而是跳转到以前的url。这就是如果您点击后退按钮(浏览器中的后退按钮),canActivate方法将触发,您可以重定向或更改url,如果我理解错误,请纠正我