describeThis article introduces a method to implement recursive components based on Vue technology. It is very simple to use Vue to display the first-level list and the second-level list, but if you want to achieve infinite levels, just applying v-for one after another will not work. At this time, you need to use the recursive method. The so-called recursion is to continuously call itself. The recursive component is to continuously call its own component to achieve infinite list display. As shown below: Code Implementation1. Tree component Create a tree.vue component in the directory. <!-- tree tree component--> <template> <div class="container"> <div v-for="item in treeData" :key="item"> <div class="row" @click="extend(item)"> <span ref="icon" class="icon-common" :class="{ 'icon-down': item.children, 'icon-radio': !item.children, 'icon-rotate': item.isExtend }" ></span> <span class="title">{{ item.title }}</span> </div> <div v-if="isExtend(item)" class="children"> <tree :tree-data="item.children" :is-extend-all="isExtendAll" /> </div> </div> </div> </template> <script> export default { props: { // Component data treeData: { type: Array, default: [], }, // Whether to expand all by default isExtendAll: { type: Boolean, default: true, } }, methods: { // Expand the list extend(item) { if (item.children) { item.isExtend = !item.isExtend; } }, isExtend(item) { const isExtend = !item.isExtend && true; return this.isExtendAll ? isExtend : !isExtend; } } } </script> <style scoped> .container { font-size: 14px; } .row { display: flex; align-items: center; cursor: pointer; margin-bottom: 10px; } /* ----------- Icon style START ------------- */ .icon-common { display: inline-block; transition: all .3s; } .icon-down { width: 0; height: 0; border: 4px solid transparent; border-top: 6px solid #000; border-bottom: none; } .icon-radio { width: 6px; height: 6px; background: #000; border-radius: 50%; } .icon-rotate { transform: rotate(-90deg); } /* ----------- Icon style END ------------- */ .title { margin-left: 10px; } .children { padding-left: 20px; } </style> 2. References Import the tree component where you need it. <template> <tree :tree-data="treeData" /> </template> <script> import Tree from './components/tree.vue'; export default { components: Tree, }, data() { return { treeData: [ { title: 'Level 1 List 1', children: [ { title: 'Secondary List 1', children: [ { title: 'Level 3 List 1', } ] }, { title: 'Secondary List 2', } ] }, { title: 'Level 1 List 2', children: [ { title: 'Secondary List 1', }, { title: 'Secondary List 2', } ] }, { title: 'Level 1 List 3', children: [ { title: 'Level 3 List 1', }, { title: 'Level 3 List 2', }, { title: 'Level 3 List 3', } ] } ] } } } </script> Rendering Summarize This component only implements data display and some basic functions, which certainly does not meet the actual needs of some projects. If you want to use it, you need to expand and improve it on this basis. (For example, if you use this component to implement the left menu, you can configure the data yourself and slightly modify the component template to achieve click jump). Component Function
The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM. You may also be interested in:
|
<<: Linux process management tool supervisor installation and configuration tutorial
>>: MySQL 8.0.18 deployment and installation tutorial under Windows 7
Table of contents Download tf-gpu Build your own ...
1. Getting started with setUp Briefly introduce t...
When using docker-compose for deployment, the out...
Preface As we all know, the nginx configuration f...
Preface When you install MySQL, you usually creat...
Table of contents Overview Promise Race Method Re...
This article example shares the specific code of ...
1. Go to the official website: D:\mysql-5.7.21-wi...
Table of contents 1. Nginx implements load balanc...
Of course, it also includes some personal experien...
Written in front When we operate the database in ...
background Last week the company trained on MySQL...
HTTP Header Explanation 1. Accept: Tells the web s...
Table of contents 1. Cancel duplicate requests 2....
nginx Overview nginx is a free, open source, high...