我想收听 NavigationStart 事件并判断其url
属性是否为/logout
。
如果是这样,当我的侦听器检测到正确 RoutesRecognized , GuardsCheckStart , ChildActivationStart 等。 > NavigationStart 事件。
否则路由器应继续路由。
我不想使用某个组件,因为我无法显示任何/logout
视图。
import { Component, OnInit } from '@angular/core';
import { Router, NavigationStart } from '@angular/router';
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.scss']
})
export class NavbarComponent implements OnInit {
constructor(
private router: Router,
) {
router.events.filter(event => event instanceof NavigationStart).subscribe(
(event: NavigationStart) => {
if (event.url == '/logout') {
this.logout();
// TODO stop firing successive events
}
}
);
}
ngOnInit() { }
logout() {
// TODO logout operations
}
}
答案 0 :(得分:1)
您可以使用路线保护。当路线匹配'注销'时,'YourGuard'将用于激活或不激活路线。如果守卫返回true,它将被重定向到'users / sign_in'(仅作为示例)。如果没有,在YourGuard内部,您可以重定向到其他路径或执行其他操作。
{ path: 'logout', canActivate: [ YourGuard ], redirectTo: 'users/sign_in' }
您无需“收听”路线事件。 阅读有关警卫here的更多信息。
答案 1 :(得分:0)
使用LoginComponent而不是redirectoTo:
{
path: 'logout',
canActivate: [YourGuard],
component: TheLoginComponent,
}
现在,在 YourGuard 中,您可以从本地存储或类似的存储中删除用户...