Treeview Vue Component

    • - main treeview container
    • **f7-treeview-item** - treeview item
    EventDescription
    <f7-treeview-item> events
    clickEvent will be triggeres when user clicks on treeview item
    treeview:openEvent will be triggered on item open
    treeview:closeEvent will be triggered on item close
    treeview:loadchildrenEvent will be triggered on first open of Treeview item with loadChildren prop. In event.detail it contains function to hide loading preloader.
    • **root-start** - element will be inserted in the beginning of treeview item element
    • **root** / **root-end** - element will be inserted in the end of treeview item element
    • **content-start** - element will be inserted in the beginning of <div class="treeview-item-content"> element
    • **content** / **content-end** - element will be inserted in the end of <div class="treeview-item-content"> element
    • **children-start** - element will be inserted in the beginning of the <div class="treeview-item-children"> element
    • **default** - element will be inserted in the end of the <div class="treeview-item-children"> element
    • **media** - element will be inserted before <div class="treeview-item-label"> element
    • **label-start** - element will be inserted in the beginning <div class="treeview-item-label"> element
    • **label** - element will be inserted in the end of <div class="treeview-item-label"> element
    1. <template>
    2. <f7-page>
    3. <f7-navbar title="Treeview" />
    4. <f7-block-title>Basic tree view</f7-block-title>
    5. <f7-block strong class="no-padding-horizontal">
    6. <f7-treeview>
    7. <f7-treeview-item label="Item 1">
    8. <f7-treeview-item label="Sub Item 1">
    9. <f7-treeview-item label="Sub Sub Item 1" />
    10. <f7-treeview-item label="Sub Sub Item 2" />
    11. </f7-treeview-item>
    12. <f7-treeview-item label="Sub Item 2">
    13. <f7-treeview-item label="Sub Sub Item 1" />
    14. <f7-treeview-item label="Sub Sub Item 2" />
    15. </f7-treeview-item>
    16. </f7-treeview-item>
    17. <f7-treeview-item label="Item 2">
    18. <f7-treeview-item label="Sub Item 1">
    19. <f7-treeview-item label="Sub Sub Item 1" />
    20. <f7-treeview-item label="Sub Sub Item 2" />
    21. </f7-treeview-item>
    22. <f7-treeview-item label="Sub Item 2">
    23. <f7-treeview-item label="Sub Sub Item 1" />
    24. <f7-treeview-item label="Sub Sub Item 2" />
    25. </f7-treeview-item>
    26. </f7-treeview-item>
    27. <f7-treeview-item label="Item 3" />
    28. </f7-treeview>
    29. </f7-block>
    30. <f7-block-title>With icons</f7-block-title>
    31. <f7-block strong class="no-padding-horizontal">
    32. <f7-treeview>
    33. <f7-treeview-item label="images" icon-f7="folder_fill">
    34. <f7-treeview-item label="avatar.png" icon-f7="images_fill" />
    35. <f7-treeview-item label="background.jpg" icon-f7="images_fill" />
    36. </f7-treeview-item>
    37. <f7-treeview-item label="documents" icon-f7="folder_fill">
    38. <f7-treeview-item label="cv.docx" icon-f7="document_text_fill" />
    39. <f7-treeview-item label="info.docx" icon-f7="document_text_fill" />
    40. </f7-treeview-item>
    41. <f7-treeview-item label=".gitignore" icon-f7="logo_github" />
    42. <f7-treeview-item label="index.html" icon-f7="document_text_fill" />
    43. </f7-treeview>
    44. </f7-block>
    45. <f7-block-title>With checkboxes</f7-block-title>
    46. <f7-block strong class="no-padding-horizontal">
    47. <f7-treeview>
    48. <f7-treeview-item label="images" icon-f7="folder_fill">
    49. <f7-checkbox slot="content-start"
    50. :checked="Object.values(checkboxes.images).indexOf(false) < 0"
    51. :indeterminate="Object.values(checkboxes.images).indexOf(false) >= 0 && Object.values(checkboxes.images).indexOf(true) >= 0"
    52. @change="(e) => Object.keys(checkboxes.images).forEach(k => checkboxes.images[k] = e.target.checked)"
    53. />
    54. <f7-treeview-item label="avatar.png" icon-f7="images_fill">
    55. <f7-checkbox slot="content-start"
    56. :checked="checkboxes.images['avatar.png']"
    57. @change="checkboxes.images['avatar.png'] = $event.target.checked"
    58. />
    59. </f7-treeview-item>
    60. <f7-treeview-item label="background.jpg" icon-f7="images_fill">
    61. <f7-checkbox slot="content-start"
    62. :checked="checkboxes.images['background.jpg']"
    63. @change="checkboxes.images['background.jpg'] = $event.target.checked"
    64. </f7-treeview-item>
    65. </f7-treeview-item>
    66. <f7-treeview-item label="documents" icon-f7="folder_fill">
    67. <f7-checkbox slot="content-start"
    68. :checked="Object.values(checkboxes.documents).indexOf(false) < 0"
    69. :indeterminate="Object.values(checkboxes.documents).indexOf(false) >= 0 && Object.values(checkboxes.documents).indexOf(true) >= 0"
    70. @change="(e) => Object.keys(checkboxes.documents).forEach(k => checkboxes.documents[k] = e.target.checked)"
    71. />
    72. <f7-treeview-item label="cv.docx" icon-f7="document_text_fill">
    73. :checked="checkboxes.documents['cv.docx']"
    74. @change="checkboxes.documents['cv.docx'] = $event.target.checked"
    75. />
    76. </f7-treeview-item>
    77. <f7-treeview-item label="info.docx" icon-f7="document_text_fill">
    78. <f7-checkbox slot="content-start"
    79. :checked="checkboxes.documents['info.docx']"
    80. @change="checkboxes.documents['info.docx'] = $event.target.checked"
    81. />
    82. </f7-treeview-item>
    83. </f7-treeview-item>
    84. <f7-treeview-item label=".gitignore" icon-f7="logo_github">
    85. <f7-checkbox slot="content-start"
    86. :checked="checkboxes['.gitignore']"
    87. @change="checkboxes['.gitignore'] = $event.target.checked"
    88. />
    89. </f7-treeview-item>
    90. <f7-treeview-item label="index.html" icon-f7="document_text_fill">
    91. <f7-checkbox slot="content-start"
    92. :checked="checkboxes['index.html']"
    93. @change="checkboxes['index.html'] = $event.target.checked"
    94. />
    95. </f7-treeview-item>
    96. </f7-treeview>
    97. </f7-block>
    98. <f7-block-title>Whole item as toggle</f7-block-title>
    99. <f7-block strong class="no-padding-horizontal">
    100. <f7-treeview>
    101. <f7-treeview-item item-toggle label="images" icon-f7="folder_fill">
    102. <f7-treeview-item label="avatar.png" icon-f7="images_fill" />
    103. <f7-treeview-item label="background.jpg" icon-f7="images_fill" />
    104. </f7-treeview-item>
    105. <f7-treeview-item item-toggle label="documents" icon-f7="folder_fill">
    106. <f7-treeview-item label="cv.docx" icon-f7="document_text_fill" />
    107. <f7-treeview-item label="info.docx" icon-f7="document_text_fill" />
    108. </f7-treeview-item>
    109. <f7-treeview-item label=".gitignore" icon-f7="logo_github" />
    110. <f7-treeview-item label="index.html" icon-f7="document_text_fill" />
    111. </f7-treeview>
    112. </f7-block>
    113. <f7-block-title>Selectable</f7-block-title>
    114. <f7-block strong class="no-padding-horizontal">
    115. <f7-treeview>
    116. <f7-treeview-item
    117. selectable
    118. :selected="selectedItem === 'images'"
    119. label="images"
    120. icon-f7="folder_fill"
    121. @click="toggleSelectable($event, 'images')"
    122. >
    123. <f7-treeview-item
    124. selectable
    125. :selected="selectedItem === 'avatar.png'"
    126. label="avatar.png"
    127. icon-f7="images_fill"
    128. @click="toggleSelectable($event, 'avatar.png')"
    129. />
    130. <f7-treeview-item
    131. selectable
    132. :selected="selectedItem === 'background.jpg'"
    133. label="background.jpg"
    134. icon-f7="images_fill"
    135. @click="toggleSelectable($event, 'background.jpg')"
    136. />
    137. </f7-treeview-item>
    138. <f7-treeview-item
    139. selectable
    140. :selected="selectedItem === 'documents'"
    141. label="documents"
    142. icon-f7="folder_fill"
    143. @click="toggleSelectable($event, 'documents')"
    144. >
    145. <f7-treeview-item
    146. selectable
    147. :selected="selectedItem === 'cv.docx'"
    148. label="cv.docx"
    149. icon-f7="document_text_fill"
    150. @click="toggleSelectable($event, 'cv.docx')"
    151. />
    152. <f7-treeview-item
    153. selectable
    154. :selected="selectedItem === 'info.docx'"
    155. label="info.docx"
    156. icon-f7="document_text_fill"
    157. @click="toggleSelectable($event, 'info.docx')"
    158. />
    159. </f7-treeview-item>
    160. <f7-treeview-item
    161. selectable
    162. :selected="selectedItem === '.gitignore'"
    163. icon-f7="logo_github"
    164. @click="toggleSelectable($event, '.gitignore')"
    165. />
    166. <f7-treeview-item
    167. :selected="selectedItem === 'index.html'"
    168. label="index.html"
    169. icon-f7="document_text_fill"
    170. @click="toggleSelectable($event, 'index.html')"
    171. />
    172. </f7-treeview>
    173. </f7-block>
    174. <f7-block-title>Preload children</f7-block-title>
    175. <f7-block strong class="no-padding-horizontal">
    176. <f7-treeview>
    177. <f7-treeview-item
    178. toggle
    179. load-children
    180. icon-f7="persons"
    181. label="Users"
    182. @treeview:loadchildren="loadChildren"
    183. >
    184. <f7-treeview-item
    185. v-for="(item, index) in loadedChildren"
    186. :key="index"
    187. icon-f7="person"
    188. :label="item.name"
    189. />
    190. </f7-treeview-item>
    191. </f7-treeview>
    192. </f7-block>
    193. <f7-block-title>With links</f7-block-title>
    194. <f7-block strong class="no-padding-horizontal">
    195. <f7-treeview>
    196. <f7-treeview-item icon-f7="data_fill" item-toggle label="Modals">
    197. <f7-treeview-item link="/popup/" icon-f7="link" label="Popup" />
    198. <f7-treeview-item link="/dialog/" icon-f7="link" label="Dialog" />
    199. <f7-treeview-item link="/action-sheet/" icon-f7="link" label="Action Sheet" />
    200. </f7-treeview-item>
    201. <f7-treeview-item icon-f7="data_fill" item-toggle label="Navigation Bars">
    202. <f7-treeview-item link="/navbar/" icon-f7="link" label="Navbar" />
    203. <f7-treeview-item link="/toolbar-tabbar/" icon-f7="link" label="Toolbar & Tabbar" />
    204. </f7-treeview-item>
    205. </f7-treeview>
    206. </f7-block>
    207. </f7-page>
    208. </template>
    209. <script>
    210. import { f7Page, f7Navbar, f7BlockTitle, f7Block, f7Treeview, f7TreeviewItem, f7Checkbox } from 'framework7-vue';
    211. export default {
    212. components: {
    213. f7Page, f7Navbar, f7BlockTitle, f7Block, f7Treeview, f7TreeviewItem, f7Checkbox
    214. },
    215. data: function () {
    216. return {
    217. checkboxes: {
    218. images: {
    219. 'avatar.png': false,
    220. 'background.jpg': false,
    221. },
    222. documents: {
    223. 'cv.docx': false,
    224. 'info.docx': false,
    225. },
    226. '.gitignore': false,
    227. '.index.html': false,
    228. },
    229. selectedItem: null,
    230. loadedChildren: [],
    231. };
    232. },
    233. methods: {
    234. toggleSelectable: function (e, item) {
    235. var self = this;
    236. var $ = self.$$;
    237. if ($(e.target).is('.treeview-toggle')) return;
    238. self.selectedItem = item;
    239. },
    240. loadChildren: function (e, done) {
    241. var self = this;
    242. setTimeout(function () {
    243. // call done() to hide preloader
    244. done();
    245. self.loadedChildren = [
    246. {
    247. name: 'John Doe',
    248. },
    249. {
    250. name: 'Jane Doe',
    251. },
    252. {
    253. name: 'Calvin Johnson',
    254. },
    255. ];
    256. }, 2000);
    257. },
    258. },
    259. };
    260. </script>