• ๊ฐœ์š”
@angular/aria/tree

Tree

๋””๋ ‰ํ‹ฐ๋ธŒ

์ค‘์ฒฉ๋œ ๋ชฉ๋ก์„ ์ ‘๊ทผ์„ฑ์ด ์ข‹๊ณ  ARIA๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. ์„ ํƒ, ํŽผ์นจ, ํ‚ค๋ณด๋“œ ํƒ์ƒ‰ ๋“ฑ ํŠธ๋ฆฌ์˜ ์ „์ฒด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

API

    
      class Tree<V> implements OnDestroy {}
    
    

element

HTMLElement

ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค.

id

InputSignal<string>

ํŠธ๋ฆฌ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.

orientation

InputSignal<"vertical" | "horizontal">

ํŠธ๋ฆฌ์˜ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

multi

InputSignalWithTransform<boolean, unknown>

์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

disabled

InputSignalWithTransform<boolean, unknown>

ํŠธ๋ฆฌ์˜ ๋น„ํ™œ์„ฑํ™” ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.

selectionMode

InputSignal<"explicit" | "follow">

ํŠธ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„ ํƒ ์ „๋žต์ž…๋‹ˆ๋‹ค.

  • explicit: ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ์ŠคํŽ˜์ด์Šค๋ฐ”๋ฅผ ๋ˆ„๋ฅด๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ญ๋ชฉ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • follow: ํฌ์ปค์Šค๋ฅผ ๋ฐ›์€ ํ•ญ๋ชฉ์ด ์ž๋™์œผ๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

focusMode

InputSignal<"roving" | "activedescendant">

ํŠธ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํฌ์ปค์Šค ์ „๋žต์ž…๋‹ˆ๋‹ค.

  • roving: tabindex๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑ ํ•ญ๋ชฉ์œผ๋กœ ํฌ์ปค์Šค๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • activedescendant: ํฌ์ปค์Šค๋ฅผ ํŠธ๋ฆฌ ์ปจํ…Œ์ด๋„ˆ์— ์œ ์ง€ํ•˜๊ณ  aria-activedescendant๋กœ ํ™œ์„ฑ ํ•ญ๋ชฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

wrap

InputSignalWithTransform<boolean, unknown>

ํƒ์ƒ‰์„ ์ˆœํ™˜ํ• ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

softDisabled

InputSignalWithTransform<boolean, unknown>

๋น„ํ™œ์„ฑํ™”๋œ ํ•ญ๋ชฉ์ด ํฌ์ปค์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. true์ด๋ฉด ๋น„ํ™œ์„ฑํ™”๋œ ํ•ญ๋ชฉ๋„ ํฌ์ปค์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. false์ด๋ฉด ํƒ์ƒ‰ํ•  ๋•Œ ๋น„ํ™œ์„ฑํ™”๋œ ํ•ญ๋ชฉ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

typeaheadDelay

InputSignal<number>

์ž…๋ ฅ ๋ฌธ์ž ๊ฒ€์ƒ‰์ด ์ดˆ๊ธฐํ™”๋˜๊ธฐ ์ „๊นŒ์ง€์˜ ์ง€์—ฐ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.

tabIndex

InputSignalWithTransform<number | undefined, string | number | undefined>

ํŠธ๋ฆฌ์˜ tabindex์ž…๋‹ˆ๋‹ค.

value

ModelSignal<V[]>

ํ˜„์žฌ ์„ ํƒ๋œ ํ•ญ๋ชฉ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

textDirection

WritableSignal<Direction>

ํ…์ŠคํŠธ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

currentType

InputSignal<"page" | "step" | "location" | "date" | "time" | "true" | "false">

aria-current์˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ํƒ์ƒ‰์šฉ ํŠธ๋ฆฌ์—์„œ ํ˜„์žฌ ํ™œ์„ฑ ํ•ญ๋ชฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-current ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

activeDescendant

Signal<string | undefined>

ํŠธ๋ฆฌ์˜ ํ™œ์„ฑ ์ž์† ID์ž…๋‹ˆ๋‹ค.

ngOnDestroy

void
@returnsvoid

scrollActiveItemIntoView

void
@paramoptionsScrollIntoViewOptions
@returnsvoid

์„ค๋ช…

์ค‘์ฒฉ๋œ ๋ชฉ๋ก์„ ์ ‘๊ทผ์„ฑ์ด ์ข‹๊ณ  ARIA๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. ์„ ํƒ, ํŽผ์นจ, ํ‚ค๋ณด๋“œ ํƒ์ƒ‰ ๋“ฑ ํŠธ๋ฆฌ์˜ ์ „์ฒด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

<ul ngTree [(value)]="selectedItems" [multi]="true">
  <ng-template
    [ngTemplateOutlet]="treeNodes"
    [ngTemplateOutletContext]="{nodes: treeData, parent: tree}"
  />
</ul>

<ng-template #treeNodes let-nodes="nodes" let-parent="parent">
  @for (node of nodes; track node.name) {
    <li ngTreeItem [parent]="parent" [value]="node.name" [label]="node.name">
      {{ node.name }}
      @if (node.children) {
        <ul role="group">
          <ng-template ngTreeItemGroup [ownedBy]="treeItem" #group="ngTreeItemGroup">
            <ng-template
              [ngTemplateOutlet]="treeNodes"
              [ngTemplateOutletContext]="{nodes: node.children, parent: group}"
            />
          </ng-template>
        </ul>
      }
    </li>
  }
</ng-template>
์ƒ์„ธ ๋‚ด์šฉ์œผ๋กœ ์ด๋™