el-menu导航报错Missing required prop: "index"、点击只有一级菜单时不合上其他已展开菜单

简介: el-menu导航报错Missing required prop: "index"、点击只有一级菜单时不合上其他已展开菜单

使用细节

目前企业开发项目,比较常用的UI框架大致有三个,elementUI、IView、AntD。当然还有别的UI框架,不过有的可能要收费。其实每个框架在使用的过程中,都会有对应的“坑”,其实所谓的“坑”就是官方文档写的不够详细,导致用户在使用的过程中的细节和官方文档定义的细节不一致。但是官方文档在维护的过程中,又不能用大白话来写,那样就太low了,所以官方文档中的部分组件的使用介绍文案会比较高大上,导致新使用此UI框架的用户会漏了什么东西。
“踩坑”其实就是总结经验的过程,为了方便大家更好的理解我写的这个案例,就把核心的代码贴出来。话不多少,先看最终效果

最终效果图

image
解说:导航栏有三个
1什么是外卖(只有一个一级导航)
2吃外卖的好处、2.1省自己烧饭时间、2.2省了刷锅时间、2.3省了跑腿时间(既有一级导航又有对应二级导航)
3吃外卖的坏处、3.1少了烧饭的乐趣、3.2外卖太贵了(也是既有一级导航又有对应二级导航)

步骤一(复制官方代码进行修改)

代码图示
image

<template>
  <div class="homeBox">
    <div class="left">
      <div class="leftNav">
        <el-menu
          :default-active="activeIndex"
          class="elMenu"
          background-color="#333"
          text-color="#B0B0B2"
          active-text-color="#fff"
          @open="handleOpen"
          @close="handleClose"
          :unique-opened="true"
          router
        >
          <el-menu-item index="eatOut">
            <i class="el-icon-eleme"></i>
            <span slot="title">什么是外卖</span>
          </el-menu-item>
          <el-submenu index="2">
            <template slot="title">
              <i class="el-icon-eleme"></i>
              <span>吃外卖的好处</span>
            </template>
            <el-menu-item index="saveTime">省自己烧饭时间</el-menu-item>
            <el-menu-item index="saveWash">省了刷锅时间</el-menu-item>
            <el-menu-item index="saveRun">省了跑腿时间</el-menu-item>
          </el-submenu>
          <el-submenu index="3">
            <template slot="title">
              <i class="el-icon-eleme"></i>
              <span>吃外卖的坏处</span>
            </template>
            <el-menu-item index="noFun">少了烧饭的乐趣</el-menu-item>
            <el-menu-item index="expensive">外卖太贵了</el-menu-item>
          </el-submenu>
        </el-menu>
      </div>
    </div>
    <div class="right">
      <router-view></router-view>
    </div>
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      // 这里使用当前路由的name名字会更加好一点,就不会写死了,刷新还在的
      activeIndex: this.$route.name,
    };
  },
  components: {},
  mounted() {},
  methods: {
    handleOpen(key, keyPath) {
      // console.log("open",key, keyPath);
    },
    handleClose(key, keyPath) {
      // console.log("close",key, keyPath);
    },
  },
};
</script>

别忘了要定义路由

image

问题一 el-submenu不加index的报错图

image
原因是index的属性值是定义组件时必须传入的。同时组件的@select也需要用到这个index

问题二 点击只有一级菜单时不自动合上其他已经展开的菜单

效果图如下

image
想要解决这个问题,就要用到组件提供的另外一个事件,@select事件,代码图如下
image

附带打印select回调函数接收的参数

image

相关文章
Element-ui 表格(Table)组件中鼠标悬停(hover)样式修改
Element-ui 表格(Table)组件中鼠标悬停(hover)样式修改
3624 0
Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中
Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中
3351 0
Element el-color-picker 颜色选择器详解
本文目录 1. 前言 2. 基本用法 3. 带默认值 4. 调整尺寸 5. 小结
3042 0
Element el-color-picker 颜色选择器详解
|
12月前
|
Java
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
722 1
|
人工智能 JavaScript 索引
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
这篇文章讨论了在Vue中进行列表渲染时遇到的“Duplicate keys detected”错误。这个错误通常发生在使用 `v-for` 指令渲染列表时,如果没有为每个循环项指定一个唯一的 `key` 属性,或者指定的 `key` 属性值重复了。文章提供了导致错误的原始代码示例,并给出了修正后的代码,通过在 `key` 绑定中加入索引确保 `key` 的唯一性。此外,文章还解释了为什么需要唯一 `key` 以及如何解决这个问题。
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
<select>标记和<option>标签的常用属性
<select>标记和<option>标签的常用属性
525 2
|
11月前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
408 0
|
设计模式 JavaScript 前端开发
【Vue3】4个比较重要的设计模式!!
【Vue3】4个比较重要的设计模式!!
|
存储 Cloud Native Linux
C++ vector中reserve和resize区别
C++ vector中reserve和resize区别
|
应用服务中间件 nginx
通过nginx访问连接websocket 错误 failed: Error during WebSocket handshake: Unexpected response code: 400
通过nginx访问连接websocket 错误 failed: Error during WebSocket handshake: Unexpected response code: 400
1571 0