是这样的,我想实现左侧菜单的图标动态生成功能,通过item.id循环遍历后端返回的菜单,在我动态生成图标时,我先创建了图标对象,key是item.id,value是icon的样式,然后我在加载菜单时直接调用,为什么不起效果呢?font包已经导入到项目中了,登录页面的icon已经使用过了。按照逻辑应该是可行的,没看出来哪里有问题。
<template>
<el-container class="home-container">
<!--头部区域-->
<el-header>
<div>
<img src="../assets/home_logo.png" alt="">
<span>后台管理系统</span>
</div>
<el-button type="info" @click="logout">退出</el-button>
</el-header>
<!--页面主体区域-->
<el-container>
<!--侧边栏-->
<el-aside width="200px">
<!--侧边栏菜单区域-->
<el-menu
background-color="#333744"
text-color="#fff"
active-text-color="#409EFF">
<!--一级菜单-->
<el-submenu :index="item.id + ''" v-for="item in menulist" :key="item.id">
<!--一级菜单的模板区域-->
<template slot="title">
<!-- 图标 这里通过对象设置,为什么没有效果?-->
<i class="iconObj[item.id]"></i>
<!--文本-->
<span>{{ item.authName }}</span>
</template>
<!--二级菜单-->
<el-menu-item :index="subItem.id + ''" v-for="subItem in item.children" :key="subItem.id">
<template slot="title">
<!-- 图标-->
<i class="el-icon-menu"></i>
<!--文本-->
<span>{{ subItem.authName }}</span>
</template>
</el-menu-item>
</el-submenu>
</el-menu>
</el-aside>
<!--主体-->
<el-main>Main</el-main>
</el-container>
</el-container>
</template>
<script>
export default {
data () {
return {
// 挂载左侧菜单数据
menulist: [],
// 这里设置对象
iconObj: {
'125': 'iconfont icon-user',
'103': 'iconfont icon-tijikongjian',
'101': 'iconfont icon-3702mima',
'102': 'iconfont icon-danju',
'145': 'iconfont icon-baobiao'
}
}
},
// 生命周期函数 页面一加载就调用
created () {
this.getMenuList()
},
methods: {
logout () {
window.sessionStorage.clear()
this.$router.push('/login')
},
// 获取所有菜单
async getMenuList () {
const { data: res } = await this.$http.get('menus') // 获取接口左侧菜单数据
if (res.meta.status !== 200) return this.$message.error(res.meta.msg)
this.menulist = res.data
}
}
}
</script>
<style lang="less" scoped>
.home-container {
height: 100%;
}
.el-header {
background-color: #373d41;
display: flex;
justify-content: space-between;
padding-left: 0;
align-items: center; // 按钮上下居中
color: #ffffff;
font-size: 20px;
> div { // 嵌套
display: flex;
align-items: center;
span {
margin-left: 15px;
}
}
}
.el-aside {
background-color: #333744;
}
.el-main {
background-color: #eaedf1;
}
</style>
v-bind绑定class