如果退出,则导航到上一条路线,否则导航到家

Navigate to the previous route if it exits, else navigate to home

我试过这样的东西

import { Router} from '@angular/router';

@Component({
  // component's declarations here
})
class SomeComponent {

  constructor(private location: Location, private private router: Router) 
  {}

  goBack() {
    if (this.location.back() === undefined)
    {
        this.router.navigate(['/']);
    }
    else
    {
        this.location.back();
    }
  }
}

问题是如果我在访问我的网站之前说 reddit.com 并且我调用了 goback() 函数,它会将我从我的网站路由到 reddit.com 而我没有想要.

我更愿意以 angular 的方式解决这个问题,而不是使用 window

确实 window 位置会将您带回上一页。我们只使用 Angular 的路由器怎么样?路由器仅存在于您的 Angular 应用程序范围内,因此如果我们要读取路由器事件,无论我们在历史上追溯到多远,它都永远不会超出 Angular 范围,而 window.location将具有此浏览器选项卡的位置。

onGoBack() 将订阅从路由器到路由器的成对事件,它将使用 take(1) 获取一个可观察对象(因此无需取消订阅),然后它将检查您的 if 条件。如果存在 previousUrl,我们将使用它,否则转到 url /.

previousUrl: string;

onGoBack() {
 this.router.events
 .pipe(take(1), filter((evt: any) => evt instanceof RoutesRecognized), pairwise())
 .subscribe((events: RoutesRecognized[]) => {

  console.log('previous url', events[0].urlAfterRedirects);
  console.log('current url', events[1].urlAfterRedirects);

  this.previousUrl = events[0].urlAfterRedirects;

    if (!this.previousUrl) {
       this.router.navigate(['/']);
    } else {
       this.router.navigateByUrl(this.previousUrl);
    }
 });
}