首页 > 其他分享 >vue + el-menu 动态加载 一二级菜单 侧边栏

vue + el-menu 动态加载 一二级菜单 侧边栏

时间:2022-11-14 22:12:16浏览次数:39  
标签:el vue name menu 100% 导航 id icon

1.HTML

<template>
    <div class="container">
        <div class="top">上</div>

        <div class="main">
            <!-- 动态加载侧边栏  首先分为可折叠的 不可折叠的   -->
            <div class="left">
                <!-- default-active 默认激活第一个  unique-opened 是否只需要展示一个菜单  router 开启路由跳转 对应的是 el-submenu 上绑定的index-->
                <el-menu :default-active="active" unique-opened router class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose"
                    background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">
                    <!-- 由于需要依次循环不同的数据格式 在外层加上一个div  -->
                    <div v-for="item in treeList" :key="item.id">
                        <!-- { id: '1', icon: 'el-icon-eleme', name: '导航1', children: [{ id: '1-1', name: '导航1-1' }, { id: '1-2', name: '导航1-2' }] }, -->
                        <el-submenu :index="item.id" v-if="item.children">
                            <template slot="title">
                                <i :class="item.icon"></i>
                                <span>{{ item.name }}</span>
                            </template>
                            <!-- 这里循环的就是 children 里面的数据 -->
                            <el-menu-item :index="val.id" v-for="val in item.children" :key="val.id">{{val.name}}</el-menu-item>
                        </el-submenu>
                        <!-- { id: '6', icon: 'el-icon-loading', name: '导航6' }, -->
                        <!-- 这里循环的就是我们的单个数据 -->
                        <el-menu-item :index="item.id" v-else>
                            <i :class="item.icon"></i>
                            <span slot="title">选项22</span>
                        </el-menu-item>
                    </div>
                </el-menu>
            </div>

            <!-- 这里是路由 -->
            <div class="right">
                <router-view />
            </div>
        </div>

    </div>
</template>

  2. JS

<script>

export default {
    name: 'IndexView',
    data() {
        return {
            active:'home',
            treeList: [
                //默认加载home页面 
                { id: 'home', icon: 'el-icon-video-camera-solid', name: '导航1' },
                { id: '2', icon: 'el-icon-eleme', name: '导航2', children: [{ id: '2', name: '导航2-1' }, { id: 'playmuisc', name: '导航2-2' }] },
                { id: '3', icon: 'el-icon-video-camera-solid', name: '导航3' },
                { id: '4', icon: 'el-icon-s-promotion', name: '导航4' },
                { id: '5', icon: 'el-icon-eleme', name: '导航5', children: [{ id: '5-1', name: '导航5-1' }, { id: '4-2', name: '导航5-2' }] },
                { id: '6', icon: 'el-icon-bottom-left', name: '导航6' },
                { id: '7', icon: 'el-icon-loading', name: '导航7' },
            ]
        }
    },
    created(){
        // 刷新后保留在当前路由  使用字符串截取当前二级路由 赋值给当前的激活索引
        console.log(location.hash.substring(location.hash.lastIndexOf('/')+1))

        this.active=location.hash.substring(location.hash.lastIndexOf('/')+1)
    },
    mounted() {

    },
    methods: {

        handleOpen(key, keyPath) {
            console.log(key, keyPath);
        },
        handleClose(key, keyPath) {
            console.log(key, keyPath);
        }

    }

}
</script>

  3.当前页面自己的Css (用了less预编译) 

<style lang="less">
.container {
    height: 100%;
    width: 100%;

    .top {
        height: 8%;
        width: 100%;
    }

    .main {
        height: 92%;
        width: 100%;
        display: flex;
        align-items: center;

        .left {
            height: 100%;
        }
        .right {
            height: 100%;
        }
    }
}
</style>

  效果: treeList 就是模拟后端返回数据

 

标签:el,vue,name,menu,100%,导航,id,icon
From: https://www.cnblogs.com/zyzlb/p/16890640.html

相关文章

  • 65.说下vue3的使用感想(说些vue3对比vue3的方便之处)
    vue3使用了组合式API,setup替换了选项式api,不需要在多个api里面写代码了,而且使用了setup的语法糖,可以更加方便写代码;vue3使用proxy替代了Object.defineProperty实现数......
  • 64.element表单校验注意点
    <!--表单验证三要素:--><!--①el-form需要有model属性【表单数据对象】、rules属性【验证规则对象】、ref属性【引用字符串】--><!--②el-form-item需要......
  • JS问题 only URL changes and page is refreshed but not totally reloaded.
    Ihaveusedhashurlsformywebsiteandmadesafariextensionforthesame.Forlogin/logoutmyextensionopensourdmain.ininnewtabandlistenstoupdatem......
  • yield_from
    final_result={}defsales_sum(pro_name):total=0nums=[]whileTrue:x=yieldprint(pro_name+"销量:",x)ifnotx:......
  • Create 1select+jdbc+jsp
    <formaction="UserServlet"method="get"> 查询条件:<inputtype="text"placeholder="输入用户名模糊查询"name="userName"> <inputtype="submit"value="搜索"> <in......
  • Minimum Number of Operations to Sort a Binary Tree by Level
    MinimumNumberofOperationstoSortaBinaryTreebyLevelYouaregiventhe root ofabinarytreewithuniquevalues.Inoneoperation,youcanchooseany......
  • Bellman-ford算法
    适用于存在负权边,题目要求最短路不超过k条边,还可以检测是否存在回路核心思想是松弛操作(枚举所有边)首先n次迭代,每一次循环所有边。我们这里用a,b,w表示存在一条从a走到b......
  • 58. vue常用的api
    1. nextTick 使用场景:通过异步渲染的页面解构不能直接dom操作,要使用nextTick(延迟回调)等待一下;nextTick的作用:感知dom的更新完成,类似于updated;2.set用来追加响......
  • Linux shell脚本全面学习
    1.Linux脚本编写基础1.1语法基本介绍1.1.1开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在......
  • vue脚手架的使用
    vue脚手架的使用搭建vue脚手架环境1.傻瓜式安装node:官网下载:https://nodejs.org/zh-cn/2.安装cnpm:>:npminstall-gcnpm--registry=https://registry.npm.tao......