Treeview Vue(ツリービュー)コンポーネント

    Treeview Vueコンポーネントは、Framework7のTreeviewコンポーネントを表しています。

    Treeviewコンポーネント

    以下のコンポーネントが含まれています。

    • f7-treeview - メインのツリービューコンテナ
    • f7-treeview-item - treeviewのアイテム

    ツリービューのプロパティ

    PropTypeDefaultDescription
    <f7-treeview-item> properties
    togglebooleanツリービューアイテムのトグルボタンを有効にします。デフォルトでは、子アイテムがある場合に有効です。
    item-togglebooleanfalseツリービューアイテム全体をトグルとして有効にします。
    selectablebooleanfalseアイテムを選択可能にします。
    selectedbooleanアイテムを選択状態にする
    openedbooleanfalseアイテムをデフォルトで開くかどうかを定義します。
    labelstringアイテムラベルテキスト
    load-childrenbooleanfalse開いたときに子アイテムを読み込む必要がある場合に有効にします。
    linkstring
    boolean
    文字列で指定された場合、リンクとリンク先のURLを有効にします。href`属性と同じです。
    <f7-treeview-item> icon related properties
    icon-sizestring
    number
    アイコンサイズ(px
    icon-colorstringアイコンの色 デフォルトカラーのうちの1つです。
    iconstringカスタムアイコンのクラス
    icon-f7stringF7アイコンのフォントアイコンの名前
    icon-materialstringマテリアルアイコンのフォントアイコンの名称
    icon-iosstringiOSテーマを使用している場合に使用されるアイコンです。アイコンファミリーとアイコン名をコロンで区切ったものです。
    icon-mdstringMDテーマを使用する場合のアイコンです。アイコンファミリーとアイコン名をコロンで区切ったもの、例えば、material:homeなど。
    icon-aurorastringAuroraテーマを使用する場合のアイコンです。アイコンファミリーとアイコンの名前をコロンで区切ったものです。
    <f7-treeview-item> navigation/router related properties
    hrefstring
    boolean
    #ロードするページのURL。href="false"のブール値の場合は、hrefタグは追加されません。
    targetstringリンク・ターゲット属性の値、例えば、_blank_selfなど。
    viewstringページを読み込むためのViewのCSSセレクタ。または、現在のビューで読み込むためのcurrent
    externalbooleanFramework7のリンク・クリック・ハンドラのバイパスを有効にする
    backbooleanバックナビゲーションリンクを有効にする
    open-instringモーダルまたはパネルとしてのオープン・ページ・ルートを可能にする。popuploginScreensheetpopoverまたはpanelとすることができる。
    forceboolean履歴の中の前のページを無視してページを強制的にロードする (back propと一緒に使用する)
    reload-currentboolean現在のアクティブなページの代わりに新しいページをリロードする
    reload-previousboolean履歴の前のページをルートからの新しいページで置き換える
    reload-allboolean新しいページをロードし、履歴とDOMからすべての前のページを削除する
    reload-detailbooleanマスター詳細ビューで詳細ページを再読み込みする
    animatebooleanページのアニメーションを無効にする
    transitionstringカスタムページトランジションの名前
    ignore-cachebooleanキャッシングを無視する
    route-tab-idstringRoutable Tab id
    route-propsobject対象となるルートコンポーネントに渡される追加のプロップを持つオブジェクト。
    prevent-routerbooleanfalse設定されている場合は、Framework7のルーターでは処理されません。
    <f7-treeview-item> action related properties
    panel-openstring
    boolean
    クリック時に開くパネルのCSSセレクタ。または、DOM内に左または右のパネルしかない場合は、leftまたはrightになります。
    panel-closestring
    boolean
    クリックでパネルを閉じる
    panel-togglestring
    boolean
    クリックされたときにパネルを閉じるかどうかのCSSセレクタ。また、DOMに左または右のパネルしかない場合には、leftまたはrightとすることができる。
    actions-openstring
    boolean
    クリックされたときに開くアクション・シートの CSS セレクタ
    actions-closestring
    boolean
    クリックされたときに閉じるアクション・シートのCSSセレクタを指定する。または、現在開いているアクションシートを閉じるためのブール値のプロパティ
    popup-openstring
    boolean
    クリック時に開くポップアップのCSSセレクタ
    popup-closestring
    boolean
    クリックにより閉じるポップアップのCSSセレクタ。または、現在開かれているポップアップを閉じるためのboolean特性
    popover-openstring
    boolean
    クリックで開くポップオーバーのCSSセレクタ
    popover-closestring
    boolean
    クリックにより閉じるポップアップのCSSセレクタ。または、現在開かれているポップオーバーを閉じるためのboolean特性
    sheet-openstring
    boolean
    クリックで開くシートモーダルのCSSセレクタ
    sheet-closestring
    boolean
    クリックにより閉じるシート・モーダルのCSSセレクタ。または、現在開かれているシートモーダルを閉じるためのboolean特性
    login-screen-openstring
    boolean
    クリックしたときに開くログイン画面のCSSセレクタ
    login-screen-closestring
    boolean
    クリックされたときに閉じるログイン画面のCSSセレクタ あるいは、現在開かれているログイン画面を閉じるためのboolean特性
    sortable-enablestring
    boolean
    クリックした際に有効となるソート可能なリストのCSSセレクタ
    sortable-disablestring
    boolean
    クリックした際に無効となるソート可能なリストのCSSセレクタ。あるいは、現在開かれているソート可能リストを閉じるためのboolean特性
    sortable-togglestring
    boolean
    クリックした際に切り替えられるソート可能リストのCSSセレクタ。あるいは、現在開かれている/閉じられているソート可能なリストをトグルするためのboolean特性
    searchbar-enablestring
    boolean
    クリックした際に有効となる拡張検索バーのCSSセレクタ。あるいは、最初に見つかった検索バーを有効にするためのboolean特性
    searchbar-disablestring
    boolean
    クリックすると無効になる拡張可能な検索バーのCSSセレクタ。あるいは、最初に見つかった検索バーを無効にするためのboolean特性
    searchbar-togglestring
    boolean
    クリックしたときに切り替えられる拡張検索バーのCSSセレクタ。あるいは、最初に見つかった検索バーをトグルするためのboolean特性
    searchbar-clearstring
    boolean
    クリックするとクリアされる拡張検索バーのCSSセレクタ。あるいは、最初に見つかった検索バーをクリアするためのboolean特性
    card-openstring
    boolean
    クリックしたときに開く拡張カードのCSSセレクタ。あるいは、最初に見つかった拡張カードを開くためのブール値
    card-closestring
    boolean
    クリックした際に閉じる拡張カードのCSSセレクタ。または、現在開かれている拡張カードを閉じるためのboolean型プロパティ
    card-prevent-openbooleanこのプロパティを持つ要素をクリックしても、その親の拡張カードは開きません。
    menu-closebooleanクリックするとメニューのドロップダウンを閉じる

    ツリービューのイベント

    EventDescription
    <f7-treeview-item> events
    clickユーザーがツリービューのアイテムをクリックすると、イベントが発生します。
    treeview:openアイテムが開いたときにイベントが発生します。
    treeview:closeアイテムが閉じたときにイベントが発生します。
    treeview:loadchildrenイベントは loadChildren プロパティーを持つツリービューアイテムが最初に開かれた時に発生します。event.detail`には、ローディング用のプリローダーを隠すための関数が含まれています。

    ツリービューのアイテムスロット

    TreeviewのVueコンポーネント(<f7-treeview-item>)には、カスタムエレメント用の追加スロットがあります。

    • root-start - 要素は、ツリービューアイテム要素の先頭に挿入されます。
    • root / root-end - 要素は、ツリービューのアイテム要素の最後に挿入されます。
    • content-start - 要素が <div class="treeview-item-content"> 要素の先頭に挿入されます。
    • content / content-end - 要素は <div class="treeview-item-content"> 要素の最後に挿入されます。
    • children-start - 要素は <div class="treeview-item-children"> 要素の最初に挿入されます。
    • default - 要素は <div class="treeview-item-children"> 要素の最後に挿入されます。
    • media - 要素は <div class="treeview-item-label"> 要素の前に挿入されます。
    • label-start - 要素は、
      ` 要素の先頭に挿入されます。
    • label - 要素は <div class="treeview-item-label"> 要素の最後に挿入されます。
    <f7-treeview-item label="Item 1">
      <img src="path-to-my-image.jpg" slot="media">
      <div slot="root-start">Root Start</div>
      <div slot="root">Root End</div>
      <div slot="content-start">Content Start</div>
      <div slot="content">Content End</div>
      <span slot="label-start">Before Label</span>
      <f7-treeview-item label="Sub Item 1" />
      ...
    </f7-treeview-item>
    
    <!-- にレンダリングされます。 -->
    <div class="treeview-item">
      <div class="treeview-item-root">
        <div>Root Start</div>
        <div class="treeview-toggle"></div>
        <div class="treeview-item-content">
          <div>Content Start</div>
          <img src="path-to-my-image.jpg">
          <div class="treeview-item-label">
            <span>Before Label</span>
            Item 1
          </div>
          <div>Content End</div>
        </div>
      </div>
      <div class="treeview-item-children">
        <div class="treeview-item">
          <div class="treeview-item-root">
            <div class="treeview-item-content">
              <div class="treeview-item-label">Sub Item 1</div>
            </div>
          </div>
        </div>
        ...
      </div>
      <div>Root End</div>
    </div>
    

    Examples

    <template>
    <f7-page>
      <f7-navbar title="Treeview"></f7-navbar>
    
      <f7-block-title>Basic tree view</f7-block-title>
      <f7-block strong class="no-padding-horizontal">
        <f7-treeview>
          <f7-treeview-item label="Item 1">
            <f7-treeview-item label="Sub Item 1">
              <f7-treeview-item label="Sub Sub Item 1"></f7-treeview-item>
              <f7-treeview-item label="Sub Sub Item 2"></f7-treeview-item>
            </f7-treeview-item>
            <f7-treeview-item label="Sub Item 2">
              <f7-treeview-item label="Sub Sub Item 1"></f7-treeview-item>
              <f7-treeview-item label="Sub Sub Item 2"></f7-treeview-item>
            </f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item label="Item 2">
            <f7-treeview-item label="Sub Item 1">
              <f7-treeview-item label="Sub Sub Item 1"></f7-treeview-item>
              <f7-treeview-item label="Sub Sub Item 2"></f7-treeview-item>
            </f7-treeview-item>
            <f7-treeview-item label="Sub Item 2">
              <f7-treeview-item label="Sub Sub Item 1"></f7-treeview-item>
              <f7-treeview-item label="Sub Sub Item 2"></f7-treeview-item>
            </f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item label="Item 3"></f7-treeview-item>
        </f7-treeview>
      </f7-block>
    
      <f7-block-title>With icons</f7-block-title>
      <f7-block strong class="no-padding-horizontal">
        <f7-treeview>
          <f7-treeview-item label="images" icon-f7="folder_fill">
            <f7-treeview-item label="avatar.png" icon-f7="photo_fill"></f7-treeview-item>
            <f7-treeview-item label="background.jpg" icon-f7="photo_fill"></f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item label="documents" icon-f7="folder_fill">
            <f7-treeview-item label="cv.docx" icon-f7="doc_text_fill"></f7-treeview-item>
            <f7-treeview-item label="info.docx" icon-f7="doc_text_fill"></f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item label=".gitignore" icon-f7="logo_github"></f7-treeview-item>
          <f7-treeview-item label="index.html" icon-f7="doc_text_fill"></f7-treeview-item>
        </f7-treeview>
      </f7-block>
    
      <f7-block-title>With checkboxes</f7-block-title>
      <f7-block strong class="no-padding-horizontal">
        <f7-treeview>
          <f7-treeview-item label="images" icon-f7="folder_fill">
            <template #content-start>
              <f7-checkbox
                :checked="Object.values(checkboxes.images).indexOf(false) < 0"
                :indeterminate="Object.values(checkboxes.images).indexOf(false) >= 0 && Object.values(checkboxes.images).indexOf(true) >= 0"
                @change="(e) => Object.keys(checkboxes.images).forEach(k => checkboxes.images[k] = e.target.checked)"
              />
            </template>
            <f7-treeview-item label="avatar.png" icon-f7="photo_fill">
              <template #content-start>
                <f7-checkbox
                  :checked="checkboxes.images['avatar.png']"
                  @change="checkboxes.images['avatar.png'] = $event.target.checked"
                />
              </template>
            </f7-treeview-item>
            <f7-treeview-item label="background.jpg" icon-f7="photo_fill">
              <template #content-start>
                <f7-checkbox
                  :checked="checkboxes.images['background.jpg']"
                  @change="checkboxes.images['background.jpg'] = $event.target.checked"
                />
              </template>
            </f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item label="documents" icon-f7="folder_fill">
            <template #content-start>
              <f7-checkbox
                :checked="Object.values(checkboxes.documents).indexOf(false) < 0"
                :indeterminate="Object.values(checkboxes.documents).indexOf(false) >= 0 && Object.values(checkboxes.documents).indexOf(true) >= 0"
                @change="(e) => Object.keys(checkboxes.documents).forEach(k => checkboxes.documents[k] = e.target.checked)"
              />
            </template>
            <f7-treeview-item label="cv.docx" icon-f7="doc_text_fill">
              <template #content-start>
                <f7-checkbox
                  :checked="checkboxes.documents['cv.docx']"
                  @change="checkboxes.documents['cv.docx'] = $event.target.checked"
                />
              </template>
            </f7-treeview-item>
            <f7-treeview-item label="info.docx" icon-f7="doc_text_fill">
              <template #content-start>
                <f7-checkbox
                  :checked="checkboxes.documents['info.docx']"
                  @change="checkboxes.documents['info.docx'] = $event.target.checked"
                />
              </template>
            </f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item label=".gitignore" icon-f7="logo_github">
            <template #content-start>
              <f7-checkbox
                :checked="checkboxes['.gitignore']"
                @change="checkboxes['.gitignore'] = $event.target.checked"
              />
            </template>
          </f7-treeview-item>
          <f7-treeview-item label="index.html" icon-f7="doc_text_fill">
            <template #content-start>
              <f7-checkbox
                :checked="checkboxes['index.html']"
                @change="checkboxes['index.html'] = $event.target.checked"
              />
            </template>
          </f7-treeview-item>
        </f7-treeview>
      </f7-block>
    
      <f7-block-title>Whole item as toggle</f7-block-title>
      <f7-block strong class="no-padding-horizontal">
        <f7-treeview>
          <f7-treeview-item item-toggle label="images" icon-f7="folder_fill">
            <f7-treeview-item label="avatar.png" icon-f7="photo_fill"></f7-treeview-item>
            <f7-treeview-item label="background.jpg" icon-f7="photo_fill"></f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item item-toggle label="documents" icon-f7="folder_fill">
            <f7-treeview-item label="cv.docx" icon-f7="doc_text_fill"></f7-treeview-item>
            <f7-treeview-item label="info.docx" icon-f7="doc_text_fill"></f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item label=".gitignore" icon-f7="logo_github"></f7-treeview-item>
          <f7-treeview-item label="index.html" icon-f7="doc_text_fill"></f7-treeview-item>
        </f7-treeview>
      </f7-block>
    
      <f7-block-title>Selectable</f7-block-title>
      <f7-block strong class="no-padding-horizontal">
        <f7-treeview>
          <f7-treeview-item
            selectable
            :selected="selectedItem === 'images'"
            label="images"
            icon-f7="folder_fill"
            @click="toggleSelectable($event, 'images')"
          >
            <f7-treeview-item
              selectable
              :selected="selectedItem === 'avatar.png'"
              label="avatar.png"
              icon-f7="photo_fill"
              @click="toggleSelectable($event, 'avatar.png')"
            ></f7-treeview-item>
            <f7-treeview-item
              selectable
              :selected="selectedItem === 'background.jpg'"
              label="background.jpg"
              icon-f7="photo_fill"
              @click="toggleSelectable($event, 'background.jpg')"
            ></f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item
            selectable
            :selected="selectedItem === 'documents'"
            label="documents"
            icon-f7="folder_fill"
            @click="toggleSelectable($event, 'documents')"
          >
            <f7-treeview-item
              selectable
              :selected="selectedItem === 'cv.docx'"
              label="cv.docx"
              icon-f7="doc_text_fill"
              @click="toggleSelectable($event, 'cv.docx')"
            ></f7-treeview-item>
            <f7-treeview-item
              selectable
              :selected="selectedItem === 'info.docx'"
              label="info.docx"
              icon-f7="doc_text_fill"
              @click="toggleSelectable($event, 'info.docx')"
            ></f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item
            selectable
            :selected="selectedItem === '.gitignore'"
            label=".gitignore"
            icon-f7="logo_github"
            @click="toggleSelectable($event, '.gitignore')"
          ></f7-treeview-item>
          <f7-treeview-item
            selectable
            :selected="selectedItem === 'index.html'"
            label="index.html"
            icon-f7="doc_text_fill"
            @click="toggleSelectable($event, 'index.html')"
          ></f7-treeview-item>
        </f7-treeview>
      </f7-block>
    
      <f7-block-title>Preload children</f7-block-title>
      <f7-block strong class="no-padding-horizontal">
        <f7-treeview>
          <f7-treeview-item
            toggle
            load-children
            icon-f7="person_2_fill"
            label="Users"
            @treeview:loadchildren="loadChildren"
          >
            <f7-treeview-item
              v-for="(item, index) in loadedChildren"
              :key="index"
              icon-f7="person_fill"
              :label="item.name"
            ></f7-treeview-item>
          </f7-treeview-item>
        </f7-treeview>
      </f7-block>
    
      <f7-block-title>With links</f7-block-title>
      <f7-block strong class="no-padding-horizontal">
        <f7-treeview>
          <f7-treeview-item icon-f7="square_grid_2x2_fill" item-toggle label="Modals">
            <f7-treeview-item link="/popup/" icon-f7="link" label="Popup" ></f7-treeview-item>
            <f7-treeview-item link="/dialog/" icon-f7="link" label="Dialog" ></f7-treeview-item>
            <f7-treeview-item link="/action-sheet/" icon-f7="link" label="Action Sheet" ></f7-treeview-item>
          </f7-treeview-item>
          <f7-treeview-item icon-f7="square_grid_2x2_fill" item-toggle label="Navigation Bars">
            <f7-treeview-item link="/navbar/" icon-f7="link" label="Navbar" ></f7-treeview-item>
            <f7-treeview-item link="/toolbar-tabbar/" icon-f7="link" label="Toolbar & Tabbar" ></f7-treeview-item>
          </f7-treeview-item>
        </f7-treeview>
      </f7-block>
    </f7-page>
    </template>
    <script>
      import { f7 } from 'framework7-vue';
    
      export default {
        data: function () {
          return {
            checkboxes: {
              images: {
                'avatar.png': false,
                'background.jpg': false,
              },
              documents: {
                'cv.docx': false,
                'info.docx': false,
              },
              '.gitignore': false,
              'index.html': false,
            },
            selectedItem: null,
            loadedChildren: [],
          };
        },
        methods: {
          toggleSelectable: function (e, item) {
            var self = this;
            if (f7.$(e.target).is('.treeview-toggle')) return;
            self.selectedItem = item;
          },
          loadChildren: function (e, done) {
            var self = this;
            setTimeout(function () {
              // call done() to hide preloader
              done();
              self.loadedChildren = [
                {
                  name: 'John Doe',
                },
                {
                  name: 'Jane Doe',
                },
                {
                  name: 'Calvin Johnson',
                },
              ];
            }, 2000);
          },
        },
      }
    </script>