当前位置:   article > 正文

Vue基础知识总结 5:vue实现树形结构_vue树形结构

vue树形结构

目录

一、前言

二、代码实例

1、数据库设计

2、实体类

3、controller

4、service

5、前端


一、前言

开发过程中,涉及到多级菜单的应用,树形结构比较常见,今天就做了一个Spring Boot + Vue + Element-UI 实现树形结构的一个小demo。

Tree组件最适合的结构是无序列列表ul,创建一个递归组件Item表示Tree选项,如果当前Item存在 children,则递归渲染子树,以此类推;同时添加一个标识管理理当前层级item的展开状态。

效果展示:

二、代码实例

1、数据库设计

2、实体类

一般树形结构都是创建若干层实体类,然后通过list结合在一起,面向对象编程

一级实体类

  1. @Data
  2. public class OneSubject {
  3. private String id;
  4. private String title;
  5. private List<TwoSubject> children = new ArrayList<>();
  6. }

二级实体类

  1. @Data
  2. public class TwoSubject {
  3. private String id;
  4. private String title;
  5. }

3、controller

  1. @GetMapping("getAllSubject")
  2. public R getAllSubject(){
  3. List<OneSubject> list = subjectService.getAllOneTwoSubject();
  4. return R.Ok().data("list",list);
  5. }

4、service

  1. //课程分类列表(树形)
  2. @Override
  3. public List<OneSubject> getAllOneTwoSubject() {
  4. //1 查询所有一级分类
  5. QueryWrapper<EduSubject> wrapperOne = new QueryWrapper<>();
  6. wrapperOne.eq("parent_id","0");
  7. List<EduSubject> oneSubjectList = baseMapper.selectList(wrapperOne);
  8. //2 查询所有2级分类
  9. QueryWrapper<EduSubject> wrapperTwo = new QueryWrapper<>();
  10. wrapperTwo.ne("parent_id","0");
  11. List<EduSubject> twoSubjectList = baseMapper.selectList(wrapperTwo);
  12. //创建list集合,用于存储最终封装数据
  13. List<OneSubject> finalSubjectList = new ArrayList<>();
  14. //3、封装一级分类
  15. for (int i = 0; i < oneSubjectList.size(); i++) {
  16. EduSubject eduSubject = oneSubjectList.get(i);
  17. OneSubject oneSubject = new OneSubject();
  18. BeanUtils.copyProperties(eduSubject,oneSubject);
  19. //在一级分类循环遍历查询所有的二级分类
  20. //创建list集合封装每一个一级分类的二级分类
  21. List<TwoSubject> twoFinalSubjectList = new ArrayList<>();
  22. for (int j = 0; j < twoSubjectList.size(); j++) {
  23. EduSubject tSubject = twoSubjectList.get(j);
  24. if(tSubject.getParentId().equals(oneSubject.getId())){
  25. TwoSubject twoSubject = new TwoSubject();
  26. BeanUtils.copyProperties(tSubject,twoSubject);
  27. twoFinalSubjectList.add(twoSubject);
  28. }
  29. }
  30. //把一级下面所有的二级分类放入一级分类中
  31. oneSubject.setChildren(twoFinalSubjectList);
  32. finalSubjectList.add(oneSubject);
  33. }
  34. //4、封装二级分类
  35. return finalSubjectList;
  36. }

5、前端

JavaScript

  1. import request from '@/utils/request'
  2. export default {
  3. //1 课程分类列表
  4. getSubjectList() {
  5. return request({
  6. url: '/eduservice/subject/getAllSubject',
  7. method: 'get'
  8. })
  9. }
  10. }

Vue页面 

  1. <template>
  2. <div class="app-container">
  3. <el-input v-model="filterText" placeholder="Filter keyword" style="margin-bottom:30px;" />
  4. <el-tree
  5. ref="tree2"
  6. :data="data2"
  7. :props="defaultProps"
  8. :filter-node-method="filterNode"
  9. class="filter-tree"
  10. default-expand-all
  11. />
  12. </div>
  13. </template>
  14. <script>
  15. import subject from '@/api/edu/subject'
  16. export default {
  17. data() {
  18. return {
  19. filterText: '',
  20. data2: [], //返回所有分类数据
  21. defaultProps: {
  22. children: 'children',
  23. label: 'title'
  24. }
  25. }
  26. },
  27. created() {
  28. this.getAllSubjectList()
  29. },
  30. watch: {
  31. filterText(val) {
  32. this.$refs.tree2.filter(val)
  33. }
  34. },
  35. methods: {
  36. getAllSubjectList() {
  37. subject.getSubjectList()
  38. .then(response => {
  39. this.data2 = response.data.list
  40. })
  41. },
  42. filterNode(value, data) {
  43. if (!value) return true
  44. return data.title.toLowerCase().indexOf(value.toLowerCase()) !== -1
  45. }
  46. }
  47. }
  48. </script>

上一篇:Vue知识体系总结 4:Vue组件化开发

下一篇:Vue基础知识总结 6:vue双向绑定原理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/231565
推荐阅读
相关标签
  

闽ICP备14008679号