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来实现。您可以在那里定义skipLocationChangereplaceUrl

  • 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,如果我理解错误,请纠正我