如果退出,则导航到上一条路线,否则导航到家
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);
}
});
}
我试过这样的东西
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);
}
});
}