element 导航菜单 图标使用自定义img图片

2021-02-02  本文已影响0人  有你有团

问题描述

使用element导航菜单做目录树,图标使用自定义的img图片,由于切图给的是png图片,没有使用字体图标或者svg,从后端返回图标的名称,直接从assets中获取图片资源,如果使用background去设置背景,那就需要一个一个去设置相应的class,以及banckground等,需要写很多的css代码,而且hover样式和普通样式如果是两套图标,就需要更多的css代码去实现,不太灵活

解决办法

<template>
  <el-menu-item
    v-if="hasOnlyChild(item)"
    :index="item.path"
    @mouseenter.native="mouseenterActive"
    @mouseleave.native="mouseleaveActive"
  >
    <img class="mr-10" :src="bingActiveIcon(item.icon)"  v-if="active || $route.path == item.path"  />
    <img class="mr-10" :src="bingIcon(item.icon)" alt="" srcset="" v-else />
    <span class="asider_span_text"> {{ item.menuName }}</span>
  </el-menu-item>
  <el-submenu v-else :index="item.path">
    <template slot="title">
      <img class="mr-10" :src="bingIcon(item.icon)" alt="" srcset="" />
      <span class="asider_span_text">{{ item.menuName }}</span>
    </template>
    <slide-item
      v-for="(child, index1) in item.children"
      :item="child"
      :index="index + '' + index1"
      :key="index1"
    ></slide-item>
  </el-submenu>
</template>

<script>
export default {
  name: "SlideItem",
  data() {
    return {
      active: false,
      select: false,
      isBlur:false
    };
  },
  props: {
    item: {
      type: Object,
      default: () => {},
    },
    index: {
      type: [String, Number],
    },
    activePath: {
        type:String,
        default:'/dataServer/resourceStatis'
    },
  },
  methods: {
    hasOnlyChild(item) {
      if (item.children.length <= 0) {
        return true;
      } else {
        return false;
      }
    },
    bingIcon(icon) {
      icon = icon || "sjfwgl";
      return require(`@/assets/menu/${icon}.png`);
    },
    bingActiveIcon(icon) {
      icon = icon || "sjfwgl";
      return require(`@/assets/menu/${icon}_hover.png`);
    },
    mouseenterActive() {
      this.active = true;
    },
    mouseleaveActive() {
      this.active = false;
    },
  }
};
</script>

<style>
</style>
上一篇 下一篇

猜你喜欢

热点阅读