Vue-cli项目与element导航菜单控件的结合使用以及遇到的问题
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',
},
}
}
- 在utils工具文件夹中建立utils.js文件;
- 在导航菜单中进行循环;
<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("/")[];
这样在渲染之前先把当前的路由设置给导航栏的默认的路由,则刷新也是显示的当前路由的内容,并且导航栏高亮的也是当前路由的那个选项了
- 解决方法:在mounted钩子函数中,添加以下代码
- 在使用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导航菜单控件的结合使用以及遇到的问题的更多相关文章
- vue+ElementUI项目中,上传控件为必填项,上传图片后清空提示信息
(ps:以下是我在项目中遇到得问题及解决方法,希望对你们有帮助.如果还有其他方法,可以留言,谢谢) 一个表单页面,使用element-ui中el-upload上传图片,此项为必填项,然后写了校验规则, ...
- ASP.NET的面包屑导航控件、树形导航控件、菜单控件
原文:http://blog.csdn.net/pan_junbiao/article/details/8579293 ASP.NET的面包屑导航控件.树形导航控件.菜单控件. 1. 面包屑导航控件— ...
- 改造@vue/cli项目为服务端渲染-ServerSideRender
VUE SEO方案二 - SSR服务端渲染 在上一章中,我们分享了预渲染的方案来解决SEO问题,个人还是很中意此方案的,既简单又能解决大部分问题.但是也有着一定的缺陷,所以我们继续来看下一个方案--服 ...
- 实用的树形菜单控件tree
jQuery plugin: Treeview 这个插件能够把无序列表转换成可展开与收缩的Tree. jQuery plugin: Treeview jQuery jstree jsTree ...
- html树形菜单控件
html树形菜单控件 链接 http://www.ithao123.cn/content-713974.html jQuery plugin: Treeview 这个插件能够把无序 ...
- Redrain 通用菜单控件使用方法和说明(附源码和demo)
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42889709 大概半年前我写过博客说明怎么改造duilib的原代Menu ...
- 【转】html树形菜单控件
Query plugin: Treeview 这个插件能够把无序列表转换成可展开与收缩的Tree. 主页:http://bassistance.de/jQuery-plugins/jquery-pl ...
- C#之菜单控件、主窗体打开子窗体、GroupBox控件使用
一.背景 一年前有学习过C#,但没有在项目中去实际做APP,重新捡起来应用到项目中.我同事本来做好一个CANOPEN设备管理的界面,由于近期搜索了别人的开发的界面,我觉得有很多东西要重新安排,以及我已 ...
- Asp.net 菜单控件
本文介绍的菜单控件采用的css 和ul list来显示菜单,生成的html小,无需javascript支持,对大部分的浏览器都支持,除ie6要单独修改css也可以使其支持. 通过本文可以了解asp.n ...
随机推荐
- outlook 使用临时邮箱 使用旧数据
控制面板-->邮件32位 显示配置文件 删除再添加 具体可参考 https://blog.csdn.net/liuyukuan/article/details/80043840 偷懒,图片从网上 ...
- javascript的基础知识点
一:鼠标提示框 需求描述:鼠标移入都input上,div显示,移出,div消失 分析:控制display=block/none 鼠标移入,鼠标移出事件 <input type="bu ...
- Ionic4 & Cordova 打包Android,含签名
IOS打包必须在Mac环境,以下讲述安卓打包并签名的过程,若是不签名,那么APP不能在手机上安装. 1.添加对应的android框架 ionic cordova prepare android 1)修 ...
- python接口自动化七(重定向-禁止重定向Location)
前言 某屌丝男A鼓起勇气向女神B打电话表白,女神B是个心机婊觉得屌丝男A是好人,不想直接拒绝于是设置呼叫转移给闺蜜C了,最终屌丝男A和女神闺蜜C表白成功了,这种场景其实就是重定向了. 一.重定向 1. ...
- kafka消费者示范代码(Java)
1.将kafka里lib目录下(除jar包外还有别的东西)所有的jar包导入工程中. 2.代码 public static void main(String[] args) { //声明连接属性 Pr ...
- 《Spring源码深度解析》二
第二章:容器的基本实现 2.1 基本用法 首先定义一个Bean:(假设在bean包下) 然后定义配置文件: 测试类: 当然,这并非是企业级用法,此处只是用来分析学习其实现 2.2 功能分析 上述三图代 ...
- 分组统计 over(partition by
sum( CASE WHEN ISNULL(b.zl, 0) = 0 THEN C.LLZL ELSE b.zl END * c.pccd * b.sl) over(partition by b.dj ...
- Linux whatis命令失效 nothing appropriate
在虚拟机中安装Linux的时候,可能没有生成whatis的数据库,所以whatis的命令无法使用. 如果出现无法使用whatis命令失效,那就生成whatis数据库. 命令: /usr/sbin/ma ...
- linux crontab -e生成日期格式
近期公司数据库服务器要上双活项目,实施顾问要收集服务器(磁盘性能数据)IO及VM的一些相关信息,并已日期时间格式生成文件 用crontab –e增加以下内容,它的作用是每隔1个小时启动一次iostat ...
- for循环,foreach, map,reduce用法对比+for in,for of
for不做赘述,相当简单: foreach方法: forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数. 注意: forEach() 对于空数组是不会执行回调函数的. array.f ...