1、基本使用

  • 第一种常用写法:导航菜单与 router-view 的配合使用

    • 将所用的导航菜单数据编写成一个数组的形式,提高维护性;

      • 在utils工具文件夹中建立utils.js文件;

        import merge from 'webpack-merge'
        /**
        * 工具类Class
        */
        class testUtils {
        constructor() { }
        //当前默认语言
        static currentLang = 'zh-CN'
        //支持国际化语言
        static supportLangs = ['zh-CN', 'en-US'] /**
        * [mergeI18nFiles 根据url里的language获取国际化文件]
        * @param {[JSON]} i18nParams [i18n参数]
        * @return {[JSON]} [国际化配置]
        */
        mergeI18nFiles(i18nParams) {
        return require('@/pages/' + i18nParams.module + '/config/lang/' + i18nParams.lang + '/index')
        }
        /**
        * [getLanguageFromUrl 通过url里的language匹配当支持国际化的language,如果匹配到,返回匹配的language,匹配不到,返回默认language]
        * @return {[String]} [匹配的language]
        */
        getLanguageFromUrl() {
        for (let val of adrsUtils.supportLangs) {
        let url = window.location.href
        let hashBackUrl = url.substring(url.indexOf('#/') + )
        const urlLang = hashBackUrl.substring(, hashBackUrl.indexOf('/'))
        if (adrsUtils.supportLangs.includes(urlLang)) {
        return urlLang
        } else {
        return adrsUtils.currentLang
        }
        }
        }
        } export default new testUtils()
        export { testUtils }
      • 在app.js文件中引入国际化:
        import Vue from 'vue'
        import VueI18n from 'vue-i18n'
        import testUtils from '@/utils/utils'
        Vue.use(VueI18n) //获取url中的language
        const language = testUtils.getLanguageFromUrl()
        //根据url里的language动态加载language配置文件
        let i18nParams = { module: 'index', lang: language }
        const messages = testUtils.mergeI18nFiles(i18nParams).default
        const i18n = new VueI18n({
        locale: language,
        messages
        })
      • 在global文件夹中,建立locale.js文件;
        import testUtils from '@/utils/utils'
        export default {
        install(Vue) {
        const language = testUtils.getLanguageFromUrl()
        Vue.$language = language
        Vue.prototype.$language = language
        }
        }
      • 在JS文件夹下面建立data.js文件;
        import Vue from 'vue'
        const language = Vue.$language
        const testingLocale = require(`../../config/lang/${language}/testing_${language}`).default //导航数据 title为导航的内容 iconName是导航图标
        export const menuData = [
        {
        title: testingLocale[language].message.testing.test1,
        iconName: require('../../assets/images/test1.png'),
        route: {
        path: 'test1',
        },
        },
        {
        title: testingLocale[language].message.testing.test2,
        iconName: require('../../assets/images/test2.png'),
        route: {
        path: 'test2',
        },
        }
        }
    • 在导航菜单中进行循环;
       <el-menu
      :default-active="defaultActive"
      router
      class="el-menu-vertical-demo"
      @select="selectRouter"
      >
      <el-menu-item
      :index="value.route.path"
      v-for="(value, index) in menuData"
      :key="index"
      >
      <img :src="value.iconName" style="width:28px;height:25px;margin:0 0.5rem" />
      <span slot="title">{{value.title}}</span>
      </el-menu-item>
      </el-menu>
    • 在data属性中设置默认的打开菜单;
       defaultActive: "test1", //默认开启导航
    • 在点击菜单的时候,如果存在跳转的条件,可以添加select事件
      /**
      * [selectRouter 菜单栏选择时的回调 否则可能无法跳转过去]
      * params index 选中的菜单路径 是一个字符串
      * params indexPath 选中的菜单路径 是一个数组
      * @return {[type]} [description]
      */
      selectRouter(index, indexPath) {
      //未对路由跳转的提交进行限制
      router.beforeEach((to, from, next) => { });
      },
  • 第二种:导航菜单与子组件的配合使用
    • 同样将数据提取出来,设置数组的形式

      export const menuData =
      [
      { //导航
      index: 'register',
      name: "导航一",
      children: [{ index: 'register', name: '选项一' }],
      imgsrc: require('@/pages/index/assets/images/home/register.png')
      }, {
      index: 'mediationCase',
      name: "导航二",
      imgsrc: require('@/pages/index/assets/images/home/auditing.png'),
      children: []
      }
      ]
    • 在vue中进行循环
      <el-menu
      class="el-menu-vertical-demo"
      router
      :default-active="activeIndex"
      unique-opened
      text-color="#fff"
      >
      <div v-for="item in menuData" :key="item.index">
      <el-menu-item
      :index=" '/' + $route.params.language + '/home/' + item.index"
      v-if="item.children.length == 0"
      >
      <img :src="item.imgsrc" width="18px" />
      <span slot="title" style="padding-left: 0.5rem;">{{item.name}}</span>
      </el-menu-item>
      <el-submenu :index="item.index" v-if="item.children.length > 0">
      <template slot="title">
      <img :src="item.imgsrc" width="18px" />
      <span style="padding-left: 0.5rem;">{{item.name}}</span>
      </template>
      <el-menu-item-group>
      <div v-for="i in item.children" :key="i.index">
      <el-menu-item
      :index=" '/' + $route.params.language + '/home/' + i.index"
      >{{i.name}}</el-menu-item>
      </div>
      </el-menu-item-group>
      </el-submenu>
      </div>
      </el-menu>
    • 不采用router-view,而采用子组件进行匹配
      <test v-show="defaultActive == 'test'"></test>

2、遇到的问题

  • 在使用elementUI构建vue项目的时候会遇到,页面刷新的时候路径为刷新之前的子路由,内容也为刷新之前的子路由内容,但是导航栏的高亮却显示在data属性中设置的默认导航栏上;
    • 解决方法:在mounted钩子函数中,添加以下代码

      this.defaultActive = window.location.hash.split("/")[];

      这样在渲染之前先把当前的路由设置给导航栏的默认的路由,则刷新也是显示的当前路由的内容,并且导航栏高亮的也是当前路由的那个选项了

  • 在使用Element UI 时点击同一个路由,控制台报错,错误信息如下
    • 解决方法:

      • 经过多次尝试发现原因可能是在重新下载依赖包时,安装的vue-router还是之前出错的那个版本,解决方法也很简单,在项目目录下运行 npm i vue-router@3.0 -S 即可;

      • 在引用vue-router的文件中添加以下代码
        // 解决在使用Element UI 时点击同一个路由,控制台报错的问题
        const originalPush = Router.prototype.push;
        Router.prototype.push = function push(location) {
        return originalPush.call(this, location).catch(err => err);
        };

Vue-cli项目与element导航菜单控件的结合使用以及遇到的问题的更多相关文章

  1. vue+ElementUI项目中,上传控件为必填项,上传图片后清空提示信息

    (ps:以下是我在项目中遇到得问题及解决方法,希望对你们有帮助.如果还有其他方法,可以留言,谢谢) 一个表单页面,使用element-ui中el-upload上传图片,此项为必填项,然后写了校验规则, ...

  2. ASP.NET的面包屑导航控件、树形导航控件、菜单控件

    原文:http://blog.csdn.net/pan_junbiao/article/details/8579293 ASP.NET的面包屑导航控件.树形导航控件.菜单控件. 1. 面包屑导航控件— ...

  3. 改造@vue/cli项目为服务端渲染-ServerSideRender

    VUE SEO方案二 - SSR服务端渲染 在上一章中,我们分享了预渲染的方案来解决SEO问题,个人还是很中意此方案的,既简单又能解决大部分问题.但是也有着一定的缺陷,所以我们继续来看下一个方案--服 ...

  4. 实用的树形菜单控件tree

     jQuery plugin: Treeview  这个插件能够把无序列表转换成可展开与收缩的Tree. jQuery plugin: Treeview  jQuery  jstree  jsTree ...

  5. html树形菜单控件

    html树形菜单控件  链接 http://www.ithao123.cn/content-713974.html         jQuery plugin: Treeview  这个插件能够把无序 ...

  6. Redrain 通用菜单控件使用方法和说明(附源码和demo)

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42889709 大概半年前我写过博客说明怎么改造duilib的原代Menu ...

  7. 【转】html树形菜单控件

    Query plugin: Treeview  这个插件能够把无序列表转换成可展开与收缩的Tree. 主页:http://bassistance.de/jQuery-plugins/jquery-pl ...

  8. C#之菜单控件、主窗体打开子窗体、GroupBox控件使用

    一.背景 一年前有学习过C#,但没有在项目中去实际做APP,重新捡起来应用到项目中.我同事本来做好一个CANOPEN设备管理的界面,由于近期搜索了别人的开发的界面,我觉得有很多东西要重新安排,以及我已 ...

  9. Asp.net 菜单控件

    本文介绍的菜单控件采用的css 和ul list来显示菜单,生成的html小,无需javascript支持,对大部分的浏览器都支持,除ie6要单独修改css也可以使其支持. 通过本文可以了解asp.n ...

随机推荐

  1. hash_table

    #include <ext/pb_ds/hash_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using name ...

  2. 聚合函数 Aggregate Function

    聚合函数是用来统计每个分组的统计信息,它们要跟 group by 一起使用,用来将每个分组所有数据 聚合 成一条统计数据. 包括 max/min/count/avg/sum 等. -- 按照部门进行分 ...

  3. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix

    题目 分析 假设,我们从\(F_{i,2}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-i}b^{n-1}r_i\): 同理,如果从\(F_{2,i}\)出发,那么对\(F ...

  4. 解决 Failed to start LSB: Bring up/down networking 问题

    我用的是虚拟机,一换网络环境虚拟机的ip就没有了,重启网上就报Failed to start LSB: Bring up/down networking错误.网上查了一圈说什么HWADDR有问题,改了 ...

  5. 【leetcode】1186. Maximum Subarray Sum with One Deletion

    题目如下: Given an array of integers, return the maximum sum for a non-empty subarray (contiguous elemen ...

  6. 计算器work_day05

    day_work_05 ------Python是一个优雅的大姐姐 作业计算器 设计思路 按照运算优先级和正则先算括号内的值,提出来判断符号问题,然后依次计算. 分析题目设计了四个函数,分别为a)去括 ...

  7. UML——概述

    1. 静态视图(类图)      静态视图不描述与时间相关的系统行为,这种行为在其他视图中描述,因此称之为静态试图.      静态视图用类图来实现,正因为它以类图为中心,因此也称之为类图.     ...

  8. luogu P1352 没有上司的舞会 x

    P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...

  9. shell java应用启动脚本(app.sh)

    #!/bin/sh # java服务中需要的jar文件或classpath路径,如业务程序.第三方jar文件log4j等 ShellAbsPath=$(cd "$(dirname " ...

  10. Spring Data Jpa (四)注解式查询方法

    详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...