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. 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏

    ---恢复内容开始--- 解决办法:打开放此台Vmware虚拟机虚拟磁盘文件及配置文件存放的位置(也就是弹出提示窗口上的路径),删除后缀为.lck的文件夹 ---恢复内容结束---

  2. 【译文】Git merge 和 Git rebase比较

    [译文]Git merge 和 Git rebase比较 原创: 胡江华 胡同学和朋友们的成长日记 2017-03-22 git rebase 这个命令经常被人认为是一种Git巫术,初学者应该避而远之 ...

  3. pymysql ,主键, 索引

    目录 一.pymysql模块的使用 1. 安装pymysql 2. 连接MySQL 3. sql注入问题 二.索引 1. 什么是索引 2. 索引有什么用 3. 索引的底层原理 4. 主键 5. MyS ...

  4. oracle基本语句(第五章、数据库逻辑存储结构管理)

    1.使用SYS用户以SYSDBA身份登录到SQL Plus,使用视图V$TABLESPACE查看表空间信息 SELECT * FROM V$TABLESPACE; 2.查看视图DBA_TABLESPA ...

  5. xgboost使用细节

    from http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模 ...

  6. Sublime text3配置C/C++编译环境

    安装sublime text3后,一直很喜欢使用它看代码(这个高亮配色真的很好看).它默认的运行环境就有C/C++,在写了一个hello world!后正常输出,但在加入scanf()输入后就不行了. ...

  7. 1222/2516. Kup

    题目描述 Description 首先你们得承认今天的题目很短很简洁... 然后,你们还得承认接下来这个题目的描述更加简洁!!! Task:给出一个N*N(1≤N≤2000)的矩阵,还给出一个整数K. ...

  8. 【织梦手机端仿站】和PC一个后台

    卸载插件,织梦默认带手机站,无需复杂使用插件以后不方便升级.织梦2015年6月8日更新后,就添加了很多针对手机移动端的设计,最大的设计就是添加了生成二维码的织梦标签和织梦手机模板功能,织梦更新后,默认 ...

  9. CentOS7安装codeblocks

    1.yum -y install epel-release 2.yum clean all && yum makecache 3.yum -y install gtk2-devel c ...

  10. 51Nod 1433 0和5 (数论 && 被9整除数的特点)

    题意 : 小K手中有n(1~1000)张牌, 每张牌上有一个一位数的数, 这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张), 排成一行这样就组成了一个数.使得这个数尽可能大, 而且可以被9 ...