没有组件的 Angular2 路由

Kai*_*tze 3 angular2-directives angular2-routing angular

我想监听NavigationStart事件并判断它的url属性是否为/logout. 如果是这样,当我的侦听器检测到正确的NavigationStart事件时,路由器应该停止触发连续事件,例如RoutesRecognizedGuardsCheckStartChildActivationStart等。否则路由器应该继续路由。

我不想使用组件,因为我不会显示任何/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
  }

}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ler 5

您可以使用路线守卫。当路由匹配 'logout' 时,'YourGuard' 将用于激活或不激活路由。如果守卫返回true,它将被重定向到'users/sign_in'(只是一个例子)。如果没有,您可以在 YourGuard 内重定向到其他路径或执行其他操作。

{ path: 'logout', canActivate: [ YourGuard ], redirectTo: 'users/sign_in' }
Run Code Online (Sandbox Code Playgroud)

您不需要“收听”路由事件。在此处阅读有关警卫的更多信息。

  • [CanActivate] guru 在没有组件的情况下不会触发。有一张票,https://github.com/angular/angular/issues/18605 解决方法 => {path: 'logout', kids: [], canActivate: [LogoutGurd]}, (2认同)