Vue.jsでデータをツリー構造で表示させるには
前にVue.jsで配列データをリスト表示する方法を書きました。
この時はループ処理(v-for)を使って一覧表示するだけでしたが、今回はツリー表示させる方法を紹介します。
[ad#top-1]
まずは完成形
まずは完成形です。以下の通りブラウザで開くカテゴリごとにツリー図で表示されます。ちょっとブックマークを意識して作ってみました。
データ構造
ソースコードを紹介する前に、ツリー図で表現するためにデータをツリーに合った構造にする必要があります。
以下の通り、foldersという親配列があって、各データの名前(name)に加え、pagesという子配列が組み込まれています。このようなデータ構造にすることでツリー図にしやすくできます。
data: { folders: [ { name: '検索', pages: [{name: 'Google'}, {name: 'Yahoo!'}, {name: 'goo!'}] }, { name: 'SNS', pages: [{name: 'Facebook'}, {name: 'Twitter'}, {name: 'Google+'}, {name: 'mixi'}] }, { name: 'Shpping', pages: [{name: 'Amazon'}, {name: 'ヤフオク'}, {name: 'ebay'}, {name: '楽天'}] } ] }
上のデータをツリー図にするHTMLは以下の通りです。
まずはfolder配列をループし、その中でpage配列をループさせていることがわかると思います。
<ul> <li v-for="folder in folders"> {{ folder.name }} <ul> <li v-for="page in folder.pages"> {{ page.name }} </li> </ul> </li> </ul>
全体のソースコード
全体のソースコードはこちら
<!DOCTYPE html> <html> <head> <title>Vue.js ツリー図</title> </head <body> <div id="example-2"> <ul> <li v-for="folder in folders"> {{ folder.name }} <ul> <li v-for="page in folder.pages"> {{ page.name }} </li> </ul> </li> </ul> </div> </body> <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/2.2.0/vue.js"></script> <script> var example2 = new Vue({ el: '#example-2', data: { folders: [ { name: '検索', pages: [{name: 'Google'}, {name: 'Yahoo!'}, {name: 'goo!'}] }, { name: 'SNS', pages: [{name: 'Facebook'}, {name: 'Twitter'}, {name: 'Google+'}, {name: 'mixi'}] }, { name: 'Shpping', pages: [{name: 'Amazon'}, {name: 'ヤフオク'}, {name: 'ebay'}, {name: '楽天'}] } ] } }) </script> </html>
.
[ad#ad-1]
スポンサーリンク