Рубрики
Без рубрики

Угловой маршрутизатор набор динамически заголовки документа страницы, защищайте маршрутизатор с охраной и Компонент сусальщиков

В этой статье мы собираемся понимать правильный путь … Как можно использовать угловой роутер? Как p … Теги с угловым, Tymdercript, JavaScript, панирумы.

В этой статье мы собираемся понимать правильный путь …

  1. Как можно использовать угловой роутер?
  2. Как защитить угловой роутер?
  3. Как установить название динамического документа при изменении страницы маршрута?
  4. Как сделать компонент хлебовщиков?

В этом проекте мы используем Bootstrap и здесь я не устанавливаю содержимое загрузочного содержимого, я предполагаю, что вы предварительно настроили компонент Bootstrap в угловом проекте.

Прежде всего создать новый угловой проект с вариантом маршрутизации.

   ng new dynamictitle

открыть Приложение. Module.ts Файл и добавляет путь маршрутизации.

  const routes: Routes = [
  {
    path: "",
    component: MainComponent,
    data: { title: "Root Page", breadcrums: "Root" }
  },
  {
    path: "login",
    component: LoginComponent,
    data: { title: "Login Page", breadcrums: "Login" }
  },
  {
    path: "home",
    component: HomeComponent,
    data: { title: "Home Page", breadcrums: "Home" },
    children: [
      {
        path: "records",
        component: RecordsComponent,
        data: { title: "Home / Records Page", breadcrums: "Records" },
        children: [
          {
            path: "findrecords",
            component: HelloComponent,
            data: { title: "Find Records Page", breadcrums: "Find-Records" }
          }
        ]
      }
    ],
    canActivate: [ProtectRouteGuard]
  },
  {
    path: "about",
    component: AboutComponent,
    data: { title: "About Page", breadcrums: "About" },
    canActivate: [ProtectRouteGuard]
  }
];

Теперь мы добавляем некоторые новые свойства выше файла маршрутизатора.

  1. Данные: {Название: ”, Брезентация: ”}, объект данных имеет два свойства, позже в компонентном дереве нам нужна эта информация, когда этот маршрут изменен. Название отображается над заголовком документа, а панорумы отображаются внутри корневой страницы.

  2. CANACTIVATE: [] Canactivate Router Guard защищает наш путь, и мы не можем направляться на эту страницу без входа в сайт или любое ограничение, которое мы навязываем на основе роли пользователя.

  3. Дети: [], это используется для установки внутреннего пути страницы. Таким образом, это внутренние маршруты или можем сказать, что эти маршруты являются детьми родственных родителей. Как Home => записи => Найти-записи Отказ

Согласно конфигурации пути маршрута, создайте связанный компонент, используя ..

   ng generate component Main

В приведенной выше команде просто измените другие компоненты, такие как .. Дом, о, крошкоры, заголовок, логин.

Теперь генерируют дочерний компонент HomeComponent ..

   ng g c home/records

И внутренние записи компонента генерируют поиск компонента записей ..

   ng g c home/records/hello 

Теперь мы защищаем наш путь ..

Для этого генерируют новую службу и охрану внутри папки аутентификации, если не создайте новую папку аутентификации корневого уровня. Внутри этой папки генерируют сервис и охрану.

   ng g s authentication
   ng g guard protect-guard

Открытая служба аутентификации …

   export class AuthenticationService {
  private isLoggedIn: BehaviorSubject = new BehaviorSubject(
    false
  );
  private isLoggedIn$ = this.isLoggedIn.asObservable();

  constructor(private router: Router) {}

  getIsUserLoggedIn(): Observable {
    return this.isLoggedIn$;
  }
  setUserLoggedIn(loggedInStatus: boolean) {
    this.isLoggedIn.next(loggedInStatus);
    loggedInStatus
      ? this.router.navigate(["home"])
      : this.router.navigate(["login"]);
  }
}

и внутри авторки ..

   export class ProtectRouteGuard implements CanActivate {
  constructor(
    private authService: AuthenticationService,
    private router: Router
  ) {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable | Promise | boolean {
    return this.authService.getIsUserLoggedIn().pipe(
      take(1),
      map((isLoggedIn: boolean) => {
        if (!isLoggedIn) {
          this.router.navigate(["login"]);
          return false;
        }
        return true;
      })
    );
  }
}

Теперь мы предоставляем защищенные службы охраны внутри приложения. Module.ts

     providers: [ProtectRouteGuard]

А внутри приложение-маршрута. Module.ts Файл, мы защищаем маршрут с использованием канактивата: [ProtectRouteguard]

До настоящего времени мы закончили защиту наших маршрутов, теперь мы переходим к серии второй части.

Часть 2 [Настройка динамического пути заголовка и панорумы]

Во-первых, генерировать новый главный сервис ..

   ng g s main

потом , внутри основного обслуживания …

   export class MainService {
  routerEventsTitle$: Observable;
  breadCrumbs: IBreadCrums[] = [{ label: "", url: "" }];

  constructor(
    private title: GetSetPageTitleService,
    private router: Router,
    private activatedRouter: ActivatedRoute
  ) {
    this.routerEventsTitle$ = this.getSetRouterTitle();
  }

  setDefaultTitle(defaultTitle: string) {
    this.title.setCurrentTitle(defaultTitle);
  }

  getSetRouterTitle(): Observable {
    return this.router.events.pipe(
      filter((event: RouterEvent) => event instanceof NavigationEnd),
      map((routeUrl: RouterEvent) => {
        let childRouter = this.activatedRouter.firstChild;
        while (childRouter.firstChild) {
          childRouter = childRouter.firstChild;
        }
        if (childRouter.snapshot.data["title"]) {
          let titleBreadCrums: IUrlTitle = {
            url: routeUrl.url,
            title: childRouter.snapshot.data["title"]
          };
          return titleBreadCrums;
        }
        return {
          url: routeUrl.url,
          title: this.title.getCurrentTitle()
        };
      }),
      map((titleUrl: IUrlTitle) => {
        this.breadCrumbs.length = 0;
        let menuItem = this.generateBreadCrums(this.activatedRouter.root);
        this.breadCrumbs.push(...menuItem);
        return { ...titleUrl, breadCrums: this.breadCrumbs };
      }),
      tap((currentTitle: IUrlTitle) => {
        // /this.breadCrumbs.push(currentTitle);
        this.title.setCurrentTitle(currentTitle.title);
        console.log("b ", this.breadCrumbs);
      })
    );
  }
  generateBreadCrums(
    activatedRouter: ActivatedRoute,
    url = "",
    breadcrumbs: IBreadCrums[] = [{ label: "", url: "" }]
  ): IBreadCrums[] {
    const children: ActivatedRoute[] = activatedRouter.children;

    if (children.length === 0) {
      return breadcrumbs;
    }

    for (const child of children) {
      const routeURL: string = child.snapshot.url
        .map(segment => segment.path)
        .join("/");
      if (routeURL !== "") {
        url += `/${routeURL}`;
      }

      console.log("url ", routeURL);
      const label = child.snapshot.data["breadcrums"];
      console.log("label ", label);
      if (label) {
        breadcrumbs.push({ label, url });
      }

      return this.generateBreadCrums(child, url, breadcrumbs);
    }
  }
}

В настоящее время, Откройте app.component.html Файл

   
     
     
    

В настоящее время, Откройте app.component.ts Файл

   export class AppComponent {
  name = "Angular " + VERSION.major;
  appRootTitle = "Root Page";
  routerEventsTitle$: Observable;

  constructor(private mainService: MainService) {
    this.mainService.setDefaultTitle(this.appRootTitle);
  }

  ngOnInit() {
    this.routerEventsTitle$ = this.mainService.routerEventsTitle$;
  }
}

Прежде всего, мы вводим основной сервис внутри app.component.ts, то мы получаем наблюдаемые и подписывающиеся внутри компонента с помощью асинхронизации. Затем внутренний файл шаблона мы проходим ввод в компонент в количестве сусальных курман.

Сейчас генерируйте файл chadcroumbs.template

   

Теперь генерируйте файл хлебовщиков.

   export class BreadcrumsComponent implements OnInit {
  items;
  @Input("modelItems") set menu(item) {
    this.items = item;
  }
  constructor() {}

  ngOnInit() {}
}

Полный рабочий пример здесь

Оригинал: “https://dev.to/gaurangdhorda/angular-router-set-dynamically-document-title-of-page-protect-router-with-guard-and-breadcrumbs-component-1784”