vue3使用Elementplus 动态显示菜单icon不生效

这篇具有很好参考价值的文章主要介绍了vue3使用Elementplus 动态显示菜单icon不生效。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.问题描述

菜单icon由后端提供,直接用的字符串返回,前端使用遍历显示,发现icon不会显示

  {'id': 8, path:'/userManagement', 'authName': "用户管理", icon: 'User', rights:['view']},
<el-menu-item :index="menu.path" v-for="menu in menuList" :key="menu.id">
            <el-icon v-if="menu.icon">
              <component :is="menu.icon"/>
            </el-icon>
            {{menu.authName}}
          </el-menu-item>

import {  DataAnalysis, Promotion, DocumentCopy,Management,Files, User, Stamp} from '@element-plus/icons-vue'

2.问题出现原因

后端提供的是字符串,那么在<component :is="menu.icon"/>处读取到的也是字符串,而<component>组件中要求是一个能渲染的组件,类似如下结构:

vue3使用Elementplus 动态显示菜单icon不生效,Vue,前端,vue.js,vue动态icon显示

3.尝试解决一

想当然的,如果后端直接返回组件形式是不是就可以了。

尝试通过shallowRef(User)形式模拟后端返回的数据,发现还是显示不出来

import { shallowRef } from 'vue'
import { User} from '@element-plus/icons-vue'

    {'id': 8, path:'/userManagement', 'authName': "用户管理", icon: shallowRef(User), rights:['view']},

数据结构如下:

vue3使用Elementplus 动态显示菜单icon不生效,Vue,前端,vue.js,vue动态icon显示

使用<component :is="menu.icon._value"/>也不行

4.解决——使用组件映射文件

 其实<component>里面只是要一个组件而已,后台返回的是字符串,将字符串对应到响应的Icon组件即可。

于是写一个映射文件:将后端返回的字符串key和前端icon组件进行映射即可文章来源地址https://www.toymoban.com/news/detail-672520.html

import {  DataAnalysis, Promotion, DocumentCopy,Management,Files, User, Stamp} from '@element-plus/icons-vue'

export const iconMapping = {
  "dataAnalysis": DataAnalysis,
  "promotion": Promotion,
  "documentCopy": DocumentCopy,
  "management": Management,
  "files": Files,
  "user": User,
  "stamp": Stamp,
}
const menuList = Object.freeze([
    {'id': 1, path:'/uploadSpec','authName': "上传spec", icon: 'dataAnalysis', children:[], rights:['view','add','edit','delete']},
    {'id': 2, path:'/showSpec', 'authName': "Spec预览", icon: 'dataAnalysis',children:[], rights:['view','add','edit','delete']},
    {'id': 3, path:'/generateTxt', 'authName': "生成测试数据", icon: 'dataAnalysis',children:[], rights:['view','add','edit','delete']},
    {'id': 4, path:'/generateCronjob', 'authName': "生成转码程序", icon: 'promotion',children:[], rights:['view','add','edit','delete']},
    {'id': 5, path:'/pdfCompare', 'authName': "PDF文档对比", icon: 'documentCopy',children:[], rights:['view','add','edit','delete']},
    {'id': 6, path:'/resourceUpdate', 'authName': "资源更新管理", icon: 'management',children:[], rights:['view','add','edit','delete']},
    {'id': 7, path:'/generateTestCase', 'authName': "自动生成ST/SIT案例", icon: 'files',children:[], rights:['view','add','edit','delete']},
    {'id': 8, path:'/userManagement', 'authName': "用户管理", icon:'user', rights:['view']},
    {'id': 9, path:'/roleManagement', 'authName': "角色管理", icon: 'stamp', rights:['view']},
]);
          <el-menu-item :index="menu.path" v-for="menu in menuList" :key="menu.id">
            <el-icon v-if="menu.icon">
              <component :is="iconMapping[menu.icon]"/>
            </el-icon>
            {{menu.authName}}
          </el-menu-item>

...
import { iconMapping } from "@/components/mapping/menuIconMapping"

到了这里,关于vue3使用Elementplus 动态显示菜单icon不生效的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用vue3+elementplus做的一个滚动菜单栏的组件

    在elementplus中看到了滚动条绑定了slider,但是这个感觉很不实用,在底部,而且横向滚动,最常见的应该是那种固定在左上角的带着菜单的滚动条,于是我就想要不做一个小demo,方便以后使用 样式如下:(背景是我父组件的背景色 首先不能用横着的滚动条,一开始我是想用

    2024年02月12日
    浏览(43)
  • 【vue3+vite】使用vite-plugin-svg-icons插件显示本地svg图标

    使用vite-plugin-svg-icons插件显示本地svg图标 1.安装vite-plugin-svg-icons插件 2.使用vite-plugin-svg-icons插件 2.1 在项目根目录查找vite.config.js,进行配置 2.2 vite-plugin-svg-icons插件引入在main.js中 2.3 svg图标放入对应路径~~~~~图标路径与iconDirs设置得路径一致 项目中使用示例: //menu.icon是路径里面

    2024年02月12日
    浏览(44)
  • Vue3+elementplus动态表格table实现

    描述 :使用el-table的时候,根据需求,能够实现由字段个数动态增加表格列,表格行数固定为3行。 实现效果 : 实现代码 : 总结 :如果需要控制行数,并且动态加载列数,故需要两个变量进行设置,这里采用的就是这个思想,能够实现需求效果。

    2024年03月15日
    浏览(63)
  • vue3 + TS + elementplus + pinia实现后台管理系统左侧菜单联动实现 tab根据路由切换联动内容

    效果图:  home.vue页面代码 left.vue页面代码 tab.vue页面代码 pinia里面的代码 安装 使用插件  在main.ts中注册 路由代码 我把代码放git上了,有需要的自行拉取 https://gitee.com/Flechazo7/vue3.git

    2024年02月09日
    浏览(50)
  • Vue3在点击菜单切换路由时,将ElementPlus UI库中el-main组件的内容滚动恢复到顶部

    功能:Vue3在点击菜单切换路由时,将页面el-main的内容滚动到顶部,布局如下,使用UI组件库为ElementPlus  在网上搜很多都是在route.js中的router.beforeEach中使用window.scrollTop(0,0) 或 window.scrollTo(0,0) 滚动,但是我使用无效,于是使用操作dom的方法,如下 可以使用 watch 函数来  监听

    2024年01月18日
    浏览(55)
  • 【VUE】ElementPlus之动态主题色调切换(Vue3 + Element Plus+Scss + Pinia)

    关于ElementPlus的基础主题色自定义可以参阅《【VUE】ElementPlus之自定义主题样式和命名空间》 有了上面基础的了解,我们知道 ElementPlus 的主题色调是基于 CSS3变量 特性进行全局控制的, 那么接下来我们也基于 CSS3变量 来实现主题色调的 动态切换 效果; 主要控制的色调类型有

    2024年02月08日
    浏览(42)
  • Vue3学习(16) - 左侧显示分类菜单

    和大家不太一样,我觉得今年的自己更加relax,没有亲戚要走,没有朋友相聚,也没有很好的哥们要去叙旧,更没有无知的相亲,甚至可以这么说没有那些闲得慌的邻居。 也可以说是从今天开始,算是可以进入自己的小世界,做自己想做的事,看看书,学习一下。 生活的精髓

    2024年02月19日
    浏览(41)
  • vue3 element-plus动态菜单及动态图标

    引入element-plus 注册图标组件 动态引入图标代码 完整代码 路由如下

    2024年01月18日
    浏览(47)
  • vue3实现动态菜单和动态路由和刷新后白屏处理

    项目中,当每一个角色得到的界面不一致的时候,我们就不能使用静态菜单了,而是要从后端得到动态的菜单数据,然后动态的将菜单数据展示在界面上。 除了在界面展示,也还要将界面的路由动态添加,在路由动态添加之后,你可能会出现刷新界面,界面变白的情况,页面

    2024年02月06日
    浏览(53)
  • Django+vue3权限菜单rabc设计和动态路由

    本次是基于Django和vue实现 github源码:nineaiyu/xadmin-server: xadmin-基于Django+vue3的rbac权限管理系统 (github.com) 服务器设计及部分代码  权限控制的话,可以基于Django的permission进行控制,并通过访问api的URL操作 核心代码如下 因此,需要对menu表进行设计,由于涉及到了前端vue路由,

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包