受到 jacekbj 对原始问题的评论的启发,
我就是这样做的:
首先我创建了 CanShowConfirmationForm 类:
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router }
from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class CanShowConfirmationForm implements CanActivate {
constructor(private router: Router) { }
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
const url: string = state.url;
alert("current url" + this.router.url);
return this.checkLogin(url);
}
checkLogin(url: string): boolean {
if (this.router.url === "/register") { return true; }
this.router.navigate(['/login']);
return false;
}
}
然后我修改了应用路由模块 app-routing.module.ts 通过
导入刚刚创建的类
import { CanShowConfirmationForm } from './can.show.confirmation.form';
然后我通过添加属性修改了组件 RegistrationSuccessComponent 的路由(在您的示例中,此组件被命名为 ConfirmationForm)
CanActivate 带值 [CanShowConfirmationForm]:
{
path: 'registration-success',
canActivate: [ CanShowConfirmationForm],
component: RegistrationSuccessComponent,
data: { title: 'RegistrationSucess' }
}
(在您的示例中,成功的注册被重定向到 url /confirmationForm,在我的示例中,重定向到 url /registration-success。)
现在,如果我尝试直接访问 url http://localhost:4200/registration-success 浏览器会直接访问 url http://localhost:4200/login 并在成功注册后显示注册成功视图。我想,这也是你想要的。