vue element 数据动态生成 el-menu

本文介绍如何使用 Vue 的动态组件和递归特性,创建自定义 `customElMenu` 组件,实现在 El-Menu 中展示嵌套层级的课程管理菜单。通过实例代码展示,包括 menuList 数据结构和组件模板的详细实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用到
动态组件和递归组件

customElMenu.vue

<template>
  <div>
    <component
      :is="menuItem.children ? 'el-submenu' : 'el-menu-item'"
      v-for="menuItem in list"
      :key="menuItem.id"
      :index="menuItem.id.toString()"
    >
      <template v-if="menuItem.children">
        <template slot="title">{{ menuItem.name }}</template>
        <customElMenu :list="menuItem.children"></customElMenu>
      </template>
      <template v-else>
        <i :class="menuItem.icon"></i>
        <span slot="title">{{ menuItem.name }}</span>
      </template>
    </component>
  </div>
</template>

<script>
export default {
  name: "customElMenu",
  props: {
    list: {
      type: Array,
      required: true,
    },
  },
  data() {
    return {};
  },
  methods: {},
};
</script>

<style lang="stylus" scoped></style>

父组件

<el-menu
        default-active="1"
        class="el-menu-vertical"
        @open="handleOpen"
        @close="handleClose"
        background-color="#ffffff"
        text-color="#000"
        active-text-color="#FF660A"
      >
        <CustomElMenu :list="menuList"></CustomElMenu>
      </el-menu>
menuList: [
        {
          id: 1,
          name: "课程主页",
          icon: "el-icon-menu",
          url: "/manage/workbench/index",
        },
        {
          id: 2,
          name: "课程大纲",
          icon: "el-icon-setting",
          url: "/manage/workbench/manage-course",
          children: [
            {
              id: 21,
              name: "子1",
              children: [
                {
                  id: 31,
                  name: "子2",
                },
              ],
            },
          ],
        },
        {
          id: 3,
          name: "课程管理",
          icon: "el-icon-setting",
          url: "/manage/workbench/manage-course",
        },
        {
          id: 4,
          name: "课程管理",
          icon: "el-icon-setting",
          url: "/manage/workbench/manage-course",
        },
      ],

效果图

在这里插入图片描述
只提供一个大概思想

Vue 和 SCSS 结合使用时,如果你想修改 Element Plus 中的 `.el-menu--horizontal` 样式,首先你需要做到以下几点: 1. **安装依赖**:确保你在项目中已经安装了 Vue CLI 和 SCSS 预处理器。如果还没有,可以运行 `npm install -D node-sass sass-loader vue-cli-plugin-vuex` 或者 `yarn add node-sass sass-loader vue-cli-plugin-vuex`。 2. **配置 SCSS**:在 `vue.config.js` 文件中添加 SCSS 的配置,例如: ```javascript module.exports = { css: { loaderOptions: { sass: { data: ` @import "~element-plus/lib/theme-chalk/index.scss"; `, }, }, }, }; ``` 3. **创建主题文件**:在 `src/assets/scss` 目录下(假设存在),创建一个新的 SCSS 文件,比如 `custom-theme.scss`,然后针对 `.el-menu--horizontal` 类编写自定义样式: ```scss // custom-theme.scss .el-menu--horizontal { /* 这里添加你想要修改的样式 */ background-color: #your-color; color: #your-text-color; /* 可能需要调整的其他属性 */ } ``` 4. **应用新主题**:在需要应用这个主题的地方,如 App.vue 或者某个具体的组件中,导入并使用自定义主题: ```html <style scoped> @import './assets/scss/custom-theme.scss'; </style> ``` 5. **刷新样式**:保存更改后,通过刷新浏览器或者使用 `npm run serve` 或 `yarn dev` 来看到更新后的效果。 记得检查是否覆盖了 Element Plus 自带的主题,以免影响其他功能。如果你有特殊需求,也可以考虑使用 CSS Modules 或者 Less 等其他预处理器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值