element ui NavMenu 实现侧边栏导航菜单

一、原理

 

根据v-for遍历菜单参数,渲染导航栏。

使用Element UI 的 Container 布局容器和NavMenu导航菜单组件,使用router-view存放二级路由出口。

二、效果

三、实现案例

html:

  <el-container>
    <el-aside
      class="aside flex-shrink-0"
      style="width:260px;height: 100%;"
    >
    
    <el-menu
      class="border-r-0"
      style="height: 100%;"
      router
      :default-active="menuActive"
      @select="menuChange"
    >
      <template v-for="(item,index) in menuList">
        <el-submenu
          :key="item.dictValue"
          :index="item.dictValue"
        >
          <template slot="title">
            <i class="el-icon-document" />
            <span>{{ item.dictLabel }}</span>
          </template>
          <el-menu-item
            v-for="child in item.children"
            :key="`${child.dictValue}`"
            :index="`${child.dictValue}`"
            :route="{ name: child.dictValue }"
          >
            <i class="el-icon-document" />
            <span slot="title">{{ child.dictLabel }}</span>
          </el-menu-item>
        </el-submenu>
      </template>
    </el-menu>
    </el-aside>
    < !-- 二级路由出口 -->
    <router-view />
  </el-container>

js:

export default {
  name: 'test',
  components: {
  },
  data() {
    const menuList = [
      {
        dictLabel: '导航一',
        dictValue: '1',
        children: [
          { dictLabel: '分组一', dictValue: 'group1Item1'},
        ],
      },
      {
        dictLabel: '导航二',
        dictValue: '2',
        children: [
          { dictLabel: '分组一', dictValue: 'group2Item1'},
        ],
      },
    ]
    return {
      menuList,
      menuActive: menuList[0].children[0]?.dictValue,
    };
  },
  watch: {
    '$route.path': function watch() {
      const { name, params } = this.$route;
      this.menuActive = `${name}${params.type || ''}`;
    },
  },
  mounted() {
    // 刷新页面时默认展示当前路由
    const { name, params } = this.$route;
    this.menuActive =  `${name}${params.type || ''}`;
  },
  methods: {
    menuChange(index) {
      this.menuActive = index;
    },
  },
};

router/index.js: 

配置路由

      {
        path: 'test',
        name: 'test',
        meta: {
          title: '菜单',
        },
        redirect: '/test/group1Item1', // 默认页面
        component: () => import('@/test/index.vue'),
        children: [
          {
            path: 'group1Item1',
            name: 'group1Item1',
            meta: {
              title: '导航一分组一',
            },
            component: () => import('@/test/group1Item1.vue'),
          },
          {
            path: 'group2Item1',
            name: 'group2Item1',
            meta: {
              title: '导航二分组一',
            },
            component: () => import('@/test/group2Item1.vue'),
          }
        ]
      },


 

好的,您想要了解如何封装elementUI的侧边导航栏并在实际页面中进行应用,下面是一些简单的步骤: 1. 首先,您需要创建一个Vue组件来封装elementUI的侧边导航栏。您可以使用Vue CLI或手动创建一个.vue文件来创建组件。 2. 在组件中,您需要导入elementUI的侧边导航栏组件。您可以使用类似于以下代码的方式导入: ``` import { Menu, MenuItem, Submenu } from 'element-ui'; ``` 3. 在组件中,您需要定义一个data属性来存储侧边导航栏的数据。例如: ``` data() { return { menuData: [ { name: '首页', icon: 'el-icon-s-home', path: '/' }, { name: '用户管理', icon: 'el-icon-user-solid', children: [ { name: '用户列表', path: '/user/list' }, { name: '添加用户', path: '/user/add' } ] } ] } } ``` 在这个例子中,我们定义了一个menuData数组来存储侧边导航栏的数据,并在其中定义了两个菜单项和一个子菜单项。 4. 在组件中,您需要使用elementUIMenu、SubmenuMenuItem组件来渲染侧边导航栏。例如: ``` <template> <el-menu default-active="1" class="el-menu-vertical-demo" :collapse="isCollapse"> <template v-for="(item, index) in menuData"> <el-submenu v-if="item.children" :index="index"> <template slot="title"> <i :class="item.icon"></i> <span>{{ item.name }}</span> </template> <el-menu-item-group> <el-menu-item v-for="(child, cIndex) in item.children" :index="`${index}-${cIndex}`">{{ child.name }}</el-menu-item> </el-menu-item-group> </el-submenu> <el-menu-item v-else :index="index"> <i :class="item.icon"></i> <span>{{ item.name }}</span> </el-menu-item> </template> </el-menu> </template> ``` 在这个例子中,我们使用了v-for指令来循环渲染菜单项和子菜单项,并使用了elementUIMenu、SubmenuMenuItem组件来渲染侧边导航栏。 5. 最后,您需要将组件导出并在实际页面中进行应用。例如: ``` <template> <div> <sidebar></sidebar> <router-view></router-view> </div> </template> <script> import Sidebar from '@/components/Sidebar.vue'; export default { components: { Sidebar } } </script> ``` 在这个例子中,我们在实际页面中导入了刚刚创建的组件,并将其应用在页面中。 以上就是封装elementUI的侧边导航栏并在实际页面中进行应用的简单步骤。希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值