Angular2 маршрутизация без компонента - PullRequest
0 голосов
/ 14 мая 2018

Я хочу прослушать 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
  }

}

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете использовать охрану маршрута.Когда маршрут соответствует 'logout', YourGuard будет использоваться для активации или нет маршрута.Если защита возвращает true, она будет перенаправлена ​​на 'users / sign_in' (просто пример).Если нет, то внутри YourGuard вы можете перенаправить на другой путь или сделать что-то еще.

{ path: 'logout', canActivate: [ YourGuard ], redirectTo: 'users/sign_in' }

Вам не нужно «слушать» события маршрута.Подробнее об охранниках здесь .

...