ツリー

ツリーは階層データを表示するために使用されます。


import Tree from 'primevue/tree';

ツリーコンポーネントは、valueとしてTreeNodeオブジェクトの配列が必要です。


<Tree :value="nodes" class="w-full md:w-[30rem]"></Tree>

ツリーの状態は、展開されているキーを定義するexpandedKeysプロパティを使用してプログラムで制御できます。 このプロパティは、ノードのキーをキーとし、値をブール値とするMapインスタンスです。 expandedKeysは、v-modelディレクティブによる双方向バインディングもサポートしていることに注意してください。


<div class="flex flex-wrap gap-2 mb-6">
    <Button type="button" icon="pi pi-plus" label="Expand All" @click="expandAll" />
    <Button type="button" icon="pi pi-minus" label="Collapse All" @click="collapseAll" />
</div>
<Tree v-model:expandedKeys="expandedKeys" :value="nodes" class="w-full md:w-[30rem]"></Tree>

単一ノード選択は、selectionModesingleに設定し、選択値バインディングを管理するselectionKeysプロパティとともに設定することで構成されます。


<Tree v-model:selectionKeys="selectedKey" :value="nodes" selectionMode="single" class="w-full md:w-[30rem]"></Tree>

selectionModemultipleに設定することで、複数のノードを選択できます。 複数選択モードでは、デフォルトでmetaKeyプレス(例:)は既存の選択に追加するために必要ありません。 オプションのmetaKeySelectionが存在する場合、新しいノードを選択するにはmetaキーが必要な方法で動作が変更されます。 タッチ対応デバイスでは、ツリーは常にmetaKeyを無視することに注意してください。

複数選択モードでは、値バインディングは、キーがノードキーで、値が選択を示すブール値であるキーと値のペアである必要があります。


<Tree v-model:selectionKeys="selectedKey" :value="nodes" class="w-full md:w-[30rem]"
    selectionMode="multiple" :metaKeySelection="checked"></Tree>

チェックボックスによる複数ノードの選択は、selectionModecheckboxとして設定することで有効になります。

チェックボックス選択モードでは、値バインディングは、キーがノードキーであり、値がノードオブジェクトのチェック状態を表すcheckedおよびpartialCheckedプロパティを持つオブジェクトであるキーと値のペアである必要があります。選択を示します。


<Tree v-model:selectionKeys="selectedKey" :value="nodes" selectionMode="checkbox" class="w-full md:w-[30rem]"></Tree>

展開、折りたたみ、選択などの各タイプのユーザーインタラクションに対してイベントが提供されます。


<Tree v-model:selectionKeys="selectedKey" :value="nodes" selectionMode="single" :metaKeySelection="false" class="w-full md:w-[30rem]"
    @nodeSelect="onNodeSelect" @nodeUnselect="onNodeUnselect" @nodeExpand="onNodeExpand" @nodeCollapse="onNodeCollapse" class="w-full md:w-[30rem]"></Tree>

遅延読み込みは、巨大なデータセットを扱う場合に役立ちます。この例では、loadingプロパティとnode-expandメソッドを使用して、ノードがオンデマンドで動的に読み込まれます。 loadingModeのデフォルト値はmaskで、iconも使用できます。


<Tree :value="nodes" @node-expand="onNodeExpand" :loading="loading" class="w-full md:w-[30rem]"></Tree>
<Tree :value="nodes2" @node-expand="onNodeExpand2" loadingMode="icon" class="w-full md:w-[30rem]"></Tree>

各ノードは、typeプロパティをスロット名に一致させることで、個別のテンプレートを持つことができます。


<Tree :value="nodes" class="w-full md:w-[30rem]">
    <template #default="slotProps">
        <b>{{ slotProps.node.label }}</b>
    </template>
    <template #url="slotProps">
        <a :href="slotProps.node.data">{{ slotProps.node.label }}</a>
    </template>
</Tree>

フィルタリングはfilterプロパティを追加することで有効になります。デフォルトでは、ノードのラベルプロパティがテキストフィールドの値と比較するために使用されます。検索中に使用するフィールドをカスタマイズするには、filterByプロパティを定義します。 さらに、filterModeはフィルタリング戦略を指定します。 lenientモードでは、クエリがノードと一致すると、ノードの子孫はすべて含まれるため、ノードの子はそれ以上検索されません。 一方、strictモードでは、クエリがノードと一致すると、すべての子孫でフィルタリングが続行されます。


<Tree :value="nodes" :filter="true" filterMode="lenient" class="w-full md:w-[30rem]"></Tree>
<Tree :value="nodes" :filter="true" filterMode="strict" class="w-full md:w-[30rem]"></Tree>

スクリーンリーダー

コンポーネントを記述する値は、aria-labelledbyまたはaria-labelプロップで指定できます。 ルートリスト要素にはtreeロールがあり、各リストアイテムにはtreeitemロールとaria-labelaria-selectedaria-expanded属性があります。 チェックボックス選択では、aria-selectedの代わりにaria-checkedが使用されます。 treenodeのコンテナ要素には、groupロールがあります。 チェックボックスとトグルアイコンは、スクリーンリーダーからは非表示になっています。これは、treeitemロールと属性を持つ親要素が、リーダーとキーボードのサポートに使用されるためです。 aria-setsizearia-posinsetaria-level属性は暗黙的に計算され、各treeitemに追加されます。

キーボードサポート

キー機能
tabコンポーネントにフォーカスが入ると、最初に選択されたノードにフォーカスが移動します。何もない場合は、最初の要素にフォーカスが当たります。 フォーカスがすでにコンポーネント内にある場合は、ページタブシーケンスの次のフォーカス可能な要素にフォーカスが移動します。
shift + tabコンポーネントにフォーカスが入ると、最後に選択されたノードにフォーカスが移動します。何もない場合は、最初の要素にフォーカスが当たります。 フォーカスがすでにコンポーネント内にある場合は、ページタブシーケンスの前のフォーカス可能な要素にフォーカスが移動します。
enterフォーカスされているツリーノードを選択します。
スペースフォーカスされているツリーノードを選択します。
下矢印次のツリーノードにフォーカスを移動します。
上矢印前のツリーノードにフォーカスを移動します。
右矢印ノードが閉じている場合はノードを開き、そうでない場合は最初の子ノードにフォーカスを移動します。
左矢印ノードが開いている場合はノードを閉じ、そうでない場合は親ノードにフォーカスを移動します。