type
status
date
slug
summary
tags
category
icon
password
初始化接口返回了全部数据,但只展示一级分类,点击一级分类出现二级分类,点击二级分类出现对应三级分类,效果如下:

再次点击一级分类,去取消二三级分类选中效果,但一级分类仍保持选中和展示,隐藏三级分类;点击二级分类,取消三级分类的选中和隐藏效果

如果子级分类列表为空,则点击父级分类,子级列表展示输入框

各级分类可以编辑与删除



封装思路:
三个分类列表一模一样,所以封装成一个组件,通过title传入名称,level来定该分类的级;pid为0表示一级,二级和三级数据的pid为其父级的id并传入。此外,还需要将一二三级不同的数据传入,并加入点击方法和数据更新方法。此外能看到,当鼠标移入或点击时,出现复选框。
另外,编辑与删除都是前端进行,只有一个保存接口,只将前端操作后的数据进行保存或更新。我们用name-level-pid来确定分类的唯一性,通过它进行删除或编辑,由于操作都在前端,所以需要克隆一份数据用来更新。
主要代码
使用方法
页面初始化
子组件点击触发选择事件
父组件监听
新增分类
编辑分类
删除分类
父组件更新
一级分类列表更新
二级分类列表更新
三级分类列表更新
总结归纳
组件封装:将分类列表封装成一个可复用的组件(CategoryComponent),用于显示一级、二级和三级分类。
数据结构:使用嵌套结构存储分类数据,每个级别的分类都有自己的状态
交互逻辑:点击一级分类显示对应的二级分类,点击二级分类显示对应的三级分类1。再次点击已选中的分类会取消下级分类的选中状态,但保持当前级别的展示1。如果某一级别没有子分类,则显示输入框以添加新分类。
数据管理:使用克隆数据来保存完整的分类数据,而实际显示的数据是根据用户交互动态过滤的。实现了添加、编辑和删除分类的功能,并在这些操作后更新both显示数据和克隆数据1。
父子组件通信:使用事件发射(emit)来通知父组件更新数据,父组件则通过props传递数据给子组件1。
表单验证:在添加和编辑分类时使用表单验证确保数据的正确性1。
性能优化:通过动态加载和隐藏分类来优化性能,而不是一次性加载所有数据。