el-tree中展示项换行展示

文章目录

效果如下所示:

没有换行展示的效果

修改样式换行之后的展示效果

本质上就是在vue代码中对el-tree的默认样式进行了修改,这是修改样式的代码。如果想了解详细的,往后看就行了

html 复制代码
<!-- <style scoped>

/* 这里需要用到深度选择器,否则改变不了样式,
无论scoped是否存在都需要使用到深度选择器 */
:deep(.el-tree-node) {
  white-space: normal;
  outline: 0;
}

:deep(.el-tree-node__content) {
  text-align: left;
  align-items: start;
  margin: 4px;
  height: 100%;

}


</style> -->

<style scoped lang="scss">
// 如果使用了sass时,也可以这样写,
// 使用了sass也可以像上面一样写,就写两个深度选择器
// 这个我也是F12,然后看到它们对应的关系的
:deep(.el-tree-node) {
      white-space: normal;
      outline: 0;

      .el-tree-node__content {
        text-align: left;
        align-items: start;
        margin: 4px;
        height: 100%;
      }
    }
</style>

想要了解el-tree使用的详情往下看

这里使用的是Vite(Home | Vite中文网 (vitejs.cn)) + Vue3 + Ts建立的项目,使用了element plus(设计 | Element Plus (element-plus.org))这个组件库。

package.json中对应的版本信息如下所示

javascript 复制代码
{
  "name": "vue3-ts-vite-wen-zhang-ji-lu-xiang-mu",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vue-tsc && vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "element-plus": "^2.4.2",
    "vue": "^3.3.4"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.2.3",
    "typescript": "^5.0.2",
    "vite": "^4.4.5",
    "vue-tsc": "^1.8.5"
  }
}

代码和数据如下所示

Vue代码中可能使用到的数据如下

假设从后端请求有一份这样的数据,属性数据result.json文件如下所示

javascript 复制代码
{
    "code": 200,
    "message": "成功",
    "data": [
        {
            "mediaCatalogId": 1,
            "mediaCatalogName": "合同",
            "parentId": -1,
            "children": [
                {
                    "mediaCatalogId": 2,
                    "mediaCatalogName": "合同",
                    "parentId": 1,
                    "children": []
                }
            ]
        },
        {
            "mediaCatalogId": 3,
            "mediaCatalogName": "项目部组织体系文件这是一个测试项测试项测试项",
            "parentId": -1,
            "children": [
                {
                    "mediaCatalogId": 4,
                    "mediaCatalogName": "项目部成立文件项目部组织体系文件这是一个测试项测试项测试项,我来进行测试了",
                    "parentId": 3,
                    "children": []
                },
                {
                    "mediaCatalogId": 5,
                    "mediaCatalogName": "质量管理机构人员项目部组织体系文件这是一个测试项测试项测试项,我来进行测试了",
                    "parentId": 3,
                    "children": []
                }
            ]
        },
        {
            "mediaCatalogId": 6,
            "mediaCatalogName": "过程资料项目部组织体系文件这是一个测试项测试项测试项,测试中",
            "parentId": -1,
            "children": [
                {
                    "mediaCatalogId": 7,
                    "mediaCatalogName": "地质资料项目部组织体系文件这是一个测试项测试项测试项,测试中",
                    "parentId": 6,
                    "children": []
                },
                {
                    "mediaCatalogId": 8,
                    "mediaCatalogName": "出工检查表",
                    "parentId": 6,
                    "children": []
                },
                {
                    "mediaCatalogId": 9,
                    "mediaCatalogName": "开工申请表",
                    "parentId": 6,
                    "children": []
                },
                {
                    "mediaCatalogId": 10,
                    "mediaCatalogName": "中期检杳查、完工验收表项目部组织体系文件这是一个测试项测试项测试项,测试中",
                    "parentId": 6,
                    "children": []
                },
                {
                    "mediaCatalogId": 11,
                    "mediaCatalogName": "钻孔较工验收单",
                    "parentId": 6,
                    "children": []
                },
                {
                    "mediaCatalogId": 12,
                    "mediaCatalogName": "钻孔质量评定表项目部组织体系文件这是一个测试项测试项测试项",
                    "parentId": 6,
                    "children": []
                },
                {
                    "mediaCatalogId": 13,
                    "mediaCatalogName": "平码验收单",
                    "parentId": 6,
                    "children": []
                }
            ]
        },
        {
            "mediaCatalogId": 14,
            "mediaCatalogName": "人员台账",
            "parentId": -1,
            "children": [
                {
                    "mediaCatalogId": 15,
                    "mediaCatalogName": "勘察单位人员台好",
                    "parentId": 14,
                    "children": []
                },
                {
                    "mediaCatalogId": 16,
                    "mediaCatalogName": "勘探单位人员台账项目部组织体系文件这是一个测试项测试项测试项",
                    "parentId": 14,
                    "children": [
                        {
                            "mediaCatalogId": 17,
                            "mediaCatalogName": "第三级分类项目部组织体系文件这是一个测试项测试项测试项",
                            "parentId": 16,
                            "children": []
                        }
                    ]
                }
            ]
        }
    ]
}

对应的ts类型,MediaCatalog.ts

typescript 复制代码
/**
 * MediaCatalog
 */
export interface MediaCatalog {
  /**
   * 创建者
   */
  createBy?: string;
  /**
   * 更新时间
   */
  createTime?: string;
  /**
   * 媒体目录ID
   */
  mediaCatalogId?: number;
  /**
   * 媒体目录名称
   */
  mediaCatalogName?: string;
  /**
   * 父级ID
   */
  parentId?: number;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 类型
   */
  type?: string;
  /**
   * 更新者
   */
  updateBy?: string;
  /**
   * 更新时间
   */
  updateTime?: string;

  /**
   * 树形结构
   */

  children?: MediaCatalog[]
  
}

Vue的代码如下:

el-tree的用法看官网:Tree 树形控件 | Element Plus (element-plus.org),这里有基础用法,就不重复追叙了,直接上代码

html 复制代码
<template>
  <div style="width: 300px; height: 800px;">
    <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick" />
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { MediaCatalog } from './test/MediaCatalog.ts'
import result from './test/result.json'

interface Tree {
  /**
   * 媒体目录ID
   */
  mediaCatalogId?: number;
  /**
   * 媒体目录名称
   */
  mediaCatalogName?: string;
  /**
   * 父级ID
   */
  parentId?: number;
  /**
   * 子集
   */
  children?: Tree[]
}

const defaultProps = {

  id: 'mediaCatalogId',
  // 这个children项在树形数据中也是需要有的
  children: 'children',
  mediaCatalogId: 'mediaCatalogId',
  mediaCatalogName: 'mediaCatalogName',
  // 可以适当多添加几项,根据需求来
  parentId: "parentId",
  // // 这个label选项是必须要有的,否则无法显示文字,只展示树形关系,也就是每一层都是空白
  label: 'mediaCatalogName'

}

const handleNodeClick = (data: Tree) => {
  console.log("点击属性结构某一项的数据", data)
}

const treeData = ref<MediaCatalog[]>([])

onMounted(() => {
  console.log(result)
  treeData.value = result.data
})

</script>

<!-- <style scoped>

/* 这里需要用到深度选择器,否则改变不了样式,
无论scoped是否存在都需要使用到深度选择器 */
:deep(.el-tree-node) {
  white-space: normal;
  outline: 0;
}

:deep(.el-tree-node__content) {
  text-align: left;
  align-items: start;
  margin: 4px;
  height: 100%;

}


</style> -->

<style scoped lang="scss">
// 如果使用了sass时,也可以这样写,
// 使用了sass也可以像上面一样写,就写两个深度选择器
// 这个我也是F12,然后看到它们对应的关系的
:deep(.el-tree-node) {
      white-space: normal;
      outline: 0;

      .el-tree-node__content {
        text-align: left;
        align-items: start;
        margin: 4px;
        height: 100%;
      }
    }
</style>

没有换行展示的效果

换行之后的展示效果

在代码中的

从上面的代码可以看出,本质上就是修改了el-tree的默认样式

html 复制代码
<!-- <style scoped>

/* 这里需要用到深度选择器,否则改变不了样式,
无论scoped是否存在都需要使用到深度选择器 */
:deep(.el-tree-node) {
  white-space: normal;
  outline: 0;
}

:deep(.el-tree-node__content) {
  text-align: left;
  align-items: start;
  margin: 4px;
  height: 100%;

}


</style> -->

<style scoped lang="scss">
// 如果使用了sass时,也可以这样写,
// 使用了sass也可以像上面一样写,就写两个深度选择器
// 这个我也是F12,然后看到它们对应的关系的
:deep(.el-tree-node) {
      white-space: normal;
      outline: 0;

      .el-tree-node__content {
        text-align: left;
        align-items: start;
        margin: 4px;
        height: 100%;
      }
    }
</style>

样式调试

从F12之后调试中我们可以看到

相关推荐
轻口味41 分钟前
命名空间与模块化概述
开发语言·前端·javascript
前端小小王1 小时前
React Hooks
前端·javascript·react.js
迷途小码农零零发1 小时前
react中使用ResizeObserver来观察元素的size变化
前端·javascript·react.js
娃哈哈哈哈呀2 小时前
vue中的css深度选择器v-deep 配合!important
前端·css·vue.js
旭东怪2 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
ekskef_sef4 小时前
32岁前端干了8年,是继续做前端开发,还是转其它工作
前端
sunshine6414 小时前
【CSS】实现tag选中对钩样式
前端·css·css3
真滴book理喻5 小时前
Vue(四)
前端·javascript·vue.js
蜜獾云5 小时前
npm淘宝镜像
前端·npm·node.js