Detaylı Rehberler
Angular Aria

Tree

Genel Bakış

Ağaç, öğelerin alt öğelerini ortaya çıkarmak için genişletilebileceği veya gizlemek için daraltılabileceği hiyerarşik verileri görüntüler. Kullanıcılar ok tuşlarıyla gezinir, düğümleri genişletip daraltır ve isteğe bağlı olarak navigasyon veya veri seçim senaryoları için öğeleri seçer.

Kullanım

Ağaçlar, kullanıcıların iç içe yapılar arasında gezinmesi gereken hiyerarşik verileri görüntülemek için iyi çalışır.

Ağaçları şu durumlarda kullanın:

  • Dosya sistemi navigasyonu oluşturma
  • Klasör ve belge hiyerarşilerini gösterme
  • İç içe menü yapıları oluşturma
  • Organizasyon şemalarını görüntüleme
  • Hiyerarşik verilere göz atma
  • İç içe bölümlerle site navigasyonu uygulama

Ağaçlardan şu durumlarda kaçının:

  • Düz listeler görüntüleme (bunun yerine Listbox kullanın)
  • Veri tabloları gösterme (bunun yerine Grid kullanın)
  • Basit açılır menüler oluşturma (bunun yerine Select kullanın)
  • Breadcrumb navigasyonu oluşturma (breadcrumb kalıplarını kullanın)

Özellikler

  • Hiyerarşik navigasyon - Genişletme ve daraltma işlevselliğine sahip iç içe ağaç yapısı
  • Seçim modları - Açık veya odağı takip eden davranışla tekli veya çoklu seçim
  • Seçim odağı takip eder - Odak değiştiğinde isteğe bağlı otomatik seçim
  • Klavye navigasyonu - Ok tuşları, Home, End ve yazarak arama
  • Genişlet/daralt - Üst düğümleri değiştirmek için Sağ/Sol oklar veya Enter
  • Devre dışı öğeler - Odak yönetimi ile belirli düğümleri devre dışı bırakma
  • Odak modları - Dolaşan tabindex veya activedescendant odak stratejileri
  • RTL desteği - Sağdan sola dil navigasyonu

Örnekler

Öğelere tıklamanın seçmek yerine eylem tetiklediği navigasyon için bir ağaç kullanın.

Navigasyon modunu etkinleştirmek için [nav]="true" ayarlayın. Bu, seçim yerine mevcut sayfayı belirtmek için aria-current kullanır.

Tekli Seçim

Kullanıcıların ağaçtan bir öğe seçtiği senaryolar için tekli seçimi etkinleştirin.

Tekli seçim için [multi]="false" (varsayılan) olarak bırakın. Kullanıcılar odaklanılan öğeyi seçmek için Boşluk tuşuna basar.

Çoklu Seçim

Kullanıcıların ağaçtan birden fazla öğe seçmesine izin verin.

Ağaçta [multi]="true" ayarlayın. Kullanıcılar Boşluk ile tek tek öğeleri seçer veya Shift+Ok tuşlarıyla aralıkları seçer.

Seçim Odağı Takip Eder

Seçim odağı takip ettiğinde, odaklanılan öğe otomatik olarak seçilir. Bu, navigasyon senaryoları için etkileşimi basitleştirir.

Ağaçta [selectionMode]="'follow'" ayarlayın. Kullanıcılar ok tuşlarıyla gezindikçe seçim otomatik olarak güncellenir.

Devre Dışı Ağaç Öğeleri

Etkileşimi engellemek için belirli ağaç düğümlerini devre dışı bırakın. Devre dışı öğelerin odak alıp alamayacağını kontrol edin.

Ağaçta [softDisabled]="true" olduğunda, devre dışı öğeler odak alabilir ancak etkinleştirilemez veya seçilemez. [softDisabled]="false" olduğunda, devre dışı öğeler klavye navigasyonu sırasında atlanır.

Test Etme

Angular Aria, ağaç bileşenlerini test etmek için bileşen koşumları (harness) sağlar. Bir bileşen testinde koşumların nasıl kullanılacağına dair bir örnek aşağıdadır:

import {ComponentFixture, TestBed} from '@angular/core/testing';
import {HarnessLoader} from '@angular/cdk/testing';
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
import {TreeHarness} from '@angular/aria/tree/testing';
import {MyTreeComponent} from './my-tree'; // Bileşeniniz

describe('MyTreeComponent', () => {
  let fixture: ComponentFixture<MyTreeComponent>;
  let loader: HarnessLoader;

  beforeEach(async () => {
    TestBed.configureTestingModule({
      imports: [MyTreeComponent],
    });

    fixture = TestBed.createComponent(MyTreeComponent);
    await fixture.whenStable();
    loader = TestbedHarnessEnvironment.loader(fixture);
  });

  it('should navigate and expand tree items', async () => {
    const tree = await loader.getHarness(TreeHarness);

    // Üst düzey yapı temsilini al
    expect(await tree.getTreeStructure()).toEqual({
      children: [{text: 'public'}, {text: 'src'}, {text: 'package.json'}],
    });

    // Tüm öğeleri al (şu anda görünür olanlar)
    const items = await tree.getItems();
    expect(items.length).toBe(3);

    // İlk öğeyi genişlet ('public')
    expect(await items[0].isExpanded()).toBe(false);
    await items[0].click();
    expect(await items[0].isExpanded()).toBe(true);

    // Genişletmeden sonra ağaç yapısının güncellendiğini doğrula
    expect(await tree.getTreeStructure()).toEqual({
      children: [
        {
          text: 'public',
          children: [{text: 'index.html'}, {text: 'styles.css'}],
        },
        {text: 'src'},
        {text: 'package.json'},
      ],
    });
  });
});

API'ler

Tree

Hiyerarşik navigasyonu ve seçimi yöneten konteyner direktifi.

Girdiler

Property Type Default Description
disabled boolean false Tüm ağacı devre dışı bırakır
softDisabled boolean true true olduğunda, devre dışı öğeler odaklanabilir ancak etkileşimsizdir
multi boolean false Birden fazla öğenin seçilip seçilemeyeceği
selectionMode 'explicit' | 'follow' 'explicit' Seçimin açık eylem gerektirip gerektirmediği veya odağı takip edip etmediği
nav boolean false Ağacın navigasyon modunda olup olmadığı (aria-current kullanır)
wrap boolean true Klavye navigasyonunun son öğeden ilk öğeye sarılıp sarılmayacağı
focusMode 'roving' | 'activedescendant' 'roving' Ağaç tarafından kullanılan odak stratejisi
values any[] [] Seçili öğe değerleri (çift yönlü bağlamayı destekler)

Metodlar

Method Parameters Description
expandAll none Tüm ağaç düğümlerini genişletir
collapseAll none Tüm ağaç düğümlerini daraltır
selectAll none Tüm öğeleri seçer (yalnızca çoklu seçim modunda)
clearSelection none Tüm seçimi temizler

TreeItem

Ağaçta alt düğümler içerebilen bireysel bir düğüm.

Girdiler

Property Type Default Description
parent Tree | TreeItemGroup Zorunlu. Üst Tree kökü veya TreeItemGroup.
value any Zorunlu. Bu ağaç öğesi için benzersiz değer
disabled boolean false Bu öğeyi devre dışı bırakır
expanded boolean false Düğümün genişletilip genişletilmediği (çift yönlü bağlamayı destekler)

Sinyaller

Property Type Description
selected Signal<boolean> Öğenin seçili olup olmadığı
active Signal<boolean> Öğenin şu anda odağa sahip olup olmadığı
hasChildren Signal<boolean> Öğenin alt düğümleri olup olmadığı

Metodlar

Method Parameters Description
expand none Bu düğümü genişletir
collapse none Bu düğümü daraltır
toggle none Genişletme durumunu değiştirir

TreeItemGroup

Genişletilebilir bir ağaç öğesinin alt düğümlerini tutan bir ng-template'e uygulanan yapısal direktif.

Girdiler

Property Type Default Description
ownedBy TreeItem Zorunlu. Üst ngTreeItem'in referansı.

Kullanım

<ul ngTree #tree="ngTree">
  <li ngTreeItem [parent]="tree" value="parent" #parentItem="ngTreeItem">
    Parent Item
    <ul role="group">
      <ng-template ngTreeItemGroup [ownedBy]="parentItem" #group="ngTreeItemGroup">
        <li ngTreeItem [parent]="group" value="child1">Child 1</li>
        <li ngTreeItem [parent]="group" value="child2">Child 2</li>
      </ng-template>
    </ul>
  </li>
</ul>