Как проверить, существует ли дочерний маршрут - Angular - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь перенаправить пользователя, если он переходит по неправильному дочернему маршруту. Я создал защиту для дочернего компонента, который запрашивает API для данных, но я не уверен, как я могу перенаправить пользователя, если данные не существуют. Я хотел бы отобразить 404 для пользователя, если данные не существуют или перенаправить на главную страницу. Извините, если продублирован, но я не смог найти решение для него.

Сценарий:

  1. Пользователь должен передать пароль, чтобы перенаправить его на свои фильмы. (Auth.Service)
 public login(password: string) {
    firebase.database().ref("clients")
      .orderByChild("password").equalTo(password).once("value", snapshot => {
        if (snapshot.exists()) {
          const route = Object.keys(snapshot.val())[0];
          this.router.navigate(["/strefa-klienta", route]);
        } else {
          this._snackBar.open(
            "Podano błędne hasło. Spróbuj jeszcze raz.",
            "Zamknij",
            { duration: 2000 }
          );
        }
      });
  }
Если он пройден, пользователь перенаправляется на свою страницу маршрута и запрашивает охрану данных (guard)
canActivate(
    child: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean> | boolean {
    return this.clientsState.loading$.pipe(
      map(loading => {
        if (!loading) {
          this.clientsState.load(child.url[0].path);
        }
        return true;
      }),
      take(1)
    );
  }
}

Это мой app-routing.module


{
   path: "strefa-klienta",
   children: [
     {
       path: "",
       pathMatch: "full",
       redirectTo: "/"
     },
     {
       path: ":id",
       component: components.ClientSiteComponent,
       canActivate: [guards.ClientGuard]
     },
   ],
}

Например. У меня есть 2 пользователя [Джон, Рик] ("/ strefa-klienta / John"). Если кто-то попытается найти пользователя, которого не существует «Анна» («/ strefa-klienta / Anna»), я бы хотел показать 404.

Спасибо за помощь

1 Ответ

0 голосов
/ 16 января 2020

Я думаю, вы должны добавить это в свой app-routing.module

{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: '**', redirectTo: 'home', pathMatch: 'full' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...