具有管理历史的Angular 6+自定义后退导航

vma*_*cek 1 angular

浏览器的历史记录有以下问题.

我在我的应用程序中点击了按钮然后我 this._router.navigate([...哪个是错的,因为我在历史页面中我和我导航的页面一样.然后当用户点击本机后退按钮时,他在错误的页面上结束.

我改成了

this.location.replaceState('xxx');
this.router.navigate(['/xxx'], { skipLocationChange  : true });
Run Code Online (Sandbox Code Playgroud)

这只是技巧的一半,因为当我在应用程序中使用后退按钮时,我导航到页面,当我使用本机后退按钮时没有任何反应,因为我有两次.

我知道如何从历史中删除另一个州?

Joe*_*nna 17

你应该导入Location:

import { Location } from '@angular/common';
Run Code Online (Sandbox Code Playgroud)

然后在构造函数中:

constructor(        
        private _location: Location
    ) { }
Run Code Online (Sandbox Code Playgroud)

在您想要返回的代码中,您可以简单地执行以下操作:

this._location.back();
Run Code Online (Sandbox Code Playgroud)

或者,如果您想跳过一些历史记录,您可以这样做:

window.history.go(-2);
Run Code Online (Sandbox Code Playgroud)

这个会做两次,就像你按了两次按钮一样.

  • 我想要实现的是不回去,转到我自己选择的位置,但删除历史中的前两个步骤.所以它实际上就像一个后退按钮. (3认同)