Author:
    Creation:2026-06-22Last update:2026-06-22

    Angular рдПрдХреАрдХрд░рдг: usePathname Hook рдкреНрд░рд▓реЗрдЦрди

    usePathname рд╣реБрдХ рд╡рд░реНрддрдорд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд╛рдердиреЗрдо рдХреЛ Angular Signal<string> рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕реНрдерд╛рди (locale) рдЦрдВрдб рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдерд╛рдиреАрдпрддрд╛-рдЬрд╛рдЧрд░реВрдХ (locale-aware) рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ тАФ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЖрдЗрдЯрдо рд╕рдХреНрд░рд┐рдп рд╣реИ тАФ рдмрд┐рдирд╛ рд╕реНрдерд╛рдиреАрдпрддрд╛ рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдПред

    Angular рдореЗрдВ usePathname рдЖрдпрд╛рдд рдХрд░рдирд╛

    typescript
    import { usePathname } from "angular-intlayer";
    

    рдЕрд╡рд▓реЛрдХрди

    usePathname window.location.pathname рдкрдврд╝рддрд╛ рд╣реИ, getPathWithoutLocale рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдиреАрдпрддрд╛ рдЙрдкрд╕рд░реНрдЧ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ popstate рдИрд╡реЗрдВрдЯ (рдмреИрдХ/рдлреЙрд░рд╡рд░реНрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди) рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ Angular рдХреЗ DestroyRef рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдШрдЯрдХ рдХреЗ рдирд╖реНрдЯ рд╣реЛрдиреЗ рдкрд░ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

    рдЙрдкрдпреЛрдЧ

    src/app/nav-item.component.ts
    import { Component, input } from "@angular/core";
    import { usePathname } from "angular-intlayer";
    
    @Component({
      standalone: true,
      selector: "app-nav-item",
      template: `
        <a
          [href]="href()"
          [attr.aria-current]="pathname() === href() ? 'page' : null"
        >
          {{ label() }}
        </a>
      `,
    })
    export class NavItemComponent {
      readonly href = input.required<string>();
      readonly label = input.required<string>();
    
      readonly pathname = usePathname();
    }
    

    рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ

    рдкреНрд░рдХрд╛рд░рд╡рд┐рд╡рд░рдг
    Signal<string>Angular рд╕рд┐рдЧреНрдирд▓ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрддрд╛ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рд╡рд░реНрддрдорд╛рди рдкрд╛рдердиреЗрдо рд╢рд╛рдорд┐рд▓ рд╣реИред

    рд╡реНрдпрд╡рд╣рд╛рд░

    • рд╕реНрдерд╛рдиреАрдпрддрд╛ рд╣рдЯрд╛рдирд╛ (Locale stripping): рдЕрдЧреНрд░рдгреА рд╕реНрдерд╛рдиреАрдпрддрд╛ рдЦрдВрдб рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ (рдЙрджрд╛. /hi/dashboard тЖТ /dashboard)ред
    • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓: popstate рдИрд╡реЗрдВрдЯреНрд╕ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмреИрдХ / рдлреЙрд░рд╡рд░реНрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди) рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИред
    • SSR-рд╕реБрд░рдХреНрд╖рд┐рдд: window рдЙрдкрд▓рдмреНрдз рди рд╣реЛрдиреЗ рдкрд░ "" рд▓реМрдЯрд╛рддрд╛ рд╣реИред
    • рд╕рдлрд╛рдИ: рд╣реЛрд╕реНрдЯ рдШрдЯрдХ рдХреЗ рдирд╖реНрдЯ рд╣реЛрдиреЗ рдкрд░ DestroyRef.onDestroy рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ popstate рд╢реНрд░реЛрддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    рдЙрджрд╛рд╣рд░рдг

    src/app/sidebar.component.ts
    import { Component } from "@angular/core";
    import { usePathname } from "angular-intlayer";
    
    @Component({
      standalone: true,
      selector: "app-sidebar",
      template: `
        <nav>
          @for (link of links; track link.href) {
            <a
              [href]="link.href"
              [style.font-weight]="pathname() === link.href ? 'bold' : 'normal'"
            >
              {{ link.label }}
            </a>
          }
        </nav>
      `,
    })
    export class SidebarComponent {
      readonly links = [
        { href: "/dashboard", label: "рдбреИрд╢рдмреЛрд░реНрдб" },
        { href: "/settings", label: "рд╕реЗрдЯрд┐рдВрдЧреНрд╕" },
      ];
    
      readonly pathname = usePathname();
    }
    

    рд╕рдВрдмрдВрдзрд┐рдд

    • useLocale тАФ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рдиреАрдпрддрд╛ + рд╕реНрдерд╛рдиреАрдпрддрд╛ рд╕реНрд╡рд┐рдЪрд░
    • getPathWithoutLocale тАФ рдЗрд╕ рд╣реБрдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛