html代码:(用的是el-tab组件)

 <el-tabs v-model="activeIndex" type="border-card" @tab-click="tabClick" @tab-remove="tabRemove">
<el-tab-pane :closable="item.name == '首页'?false:true" :key="item.name" v-for="(item) in options" :label="item.name" :name="item.route">
</el-tab-pane>
</el-tabs>

methods:

  // tab 切换时, 动态的切换路由
tabClick(tab) {
this.$router.push({
path: this.activeIndex
}); // 路由跳转
}, tabRemove(targetName) {
this.$store.dispatch('menu/deleteTabs', targetName);
// 还同时需要处理一种情况当需要移除的页面为当前激活的页面时, 将上一个 tab 页作为激活 tab
if (this.activeIndex === targetName) {
// 设置当前激活的路由
if (this.options && this.options.length >= ) {
this.$store.dispatch('menu/setActiveIndex', this.options[this.options.length - ].route);
this.$router.push({
path: this.activeIndex
});
}else{
this.$router.push('/home')
}
}
}

数据是存放在vuex中的:

 computed: {
options: {
get () {return this.$store.state.menu.options},
set (val) {this.$store.dispatch('menu/addTabs', val)}
},
// 动态设置及获取当前激活的 tab 页
activeIndex: {
get() {
return this.$store.state.menu.activeIndex;
},
set(val) {
this.$store.dispatch('menu/setActiveIndex', val);
}
}
},

mounted:

 mounted() {
let options = JSON.parse(window.localStorage.getItem('menuOptions'))
this.activeIndex = localStorage.getItem('menuIndex')
if(!options) {
options = []
this.$router.push('/home')
this.$store.commit('menu/SET_ACTIVEI_NDEX', options.route)
// this.$store.dispatch('menu/setActiveIndex', options.route)
}else {
this.$store.commit('menu/SET_OPTIONS', options)
}
//this.$store.dispatch('menu/setActiveIndex', options.route)
//this.$store.commit('menu/SET_OPTIONS', options)
// 设置当前激活的路由
if (options && options.length >= ) {
for(var i = ; i < options.length; i++){
if(options[i].route == this.activeIndex){
this.$store.dispatch('menu/setActiveIndex', options[i].route) }
}
}else{
this.$router.push('/home')
}
},

store/menu.js

 const state = {
options: [{ route: '/home', name: '首页' }],
activeIndex: '/home'
}
const mutations = {
SET_OPTIONS: (state, data) => {
state.options = data
},
// 添加 tabs
ADD_TABS: (state, data) => {
//state.options.findIndex(m => m.name === data.name) < 0 && state.options.push(data)
state.options.push(data);
localStorage.setItem("menuOptions", JSON.stringify(state.options))
},
// 删除 tabs
DELETE_TABS: (state, route) => {
let index = ;
for (let option of state.options) {
if (option.route === route) {
break;
}
index++;
}
state.options.splice(index, );
localStorage.setItem("menuOptions", JSON.stringify(state.options))
},
// 设置当前激活的 tab,route
SET_ACTIVEI_NDEX: (state, index) => {
state.activeIndex = index;
localStorage.setItem("menuIndex", state.activeIndex)
},
}
const actions = {
addTabs({ commit }, info) {
commit('ADD_TABS', info)
},
deleteTabs({ commit }, info) {
commit('DELETE_TABS', info)
},
setActiveIndex({ commit }, info) {
commit('SET_ACTIVEI_NDEX', info)
},
} export default {
namespaced: true,
state,
mutations,
actions
}

over!

element UI中的tab切换栏的更多相关文章

  1. Tab切换栏

    // Tab切换栏 function setTab(name, m, n) { for (var i = 1; i <= n; i++) { var menu = document.getEle ...

  2. Element UI 中组件this.$message报错

    最近在做毕设的时候,用Element UI中的消息提示message一直报以下的错误: 展示的效果也不好看,没有图标什么的: 但我明明有在main.js引入了element-ui 呀,因为毕设时间很赶 ...

  3. 关于Element UI中页面样式小问题

    一,修改组件dialog窗口的大小 二,在我使用upload组件上传一张美女图片时,发现当预览图片时,图片是灰色的,点击一下才会变亮,这种效果使我很不舒服,于是我通过添加下面的一条样式,问题解决了(可 ...

  4. 关于Element UI中select组件中遇到的问题

    问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...

  5. 前端实现Tab切换栏

    tab切换,所需的 UI 只有两组元素 - Header 和 Tab,下面介绍几种不同的实现方法和他们的优缺点 本文主要说一些 CSS 的实现方法.最好的方法是 第四种 => label + i ...

  6. layui中的tab切换

    tab切换是常见的效果,为了方便经常使用插架中自带的,下面是layui中自带的tab切换效果, 主要代码如下: <!DOCTYPE html> <html lang="en ...

  7. element ui 中的 resetFields() 报错'resetFields' of undefined

    每次做各种form表单时,首先要注意的是初始化,但是刚开始若没有仔细看文档,则会自己写个方法将数据设置为空,但是这样就会出现一个问题,表单内存在各种验证,假如是一个弹框内有form表单,弹框出现就执行 ...

  8. element ui中的一些小技巧

    最近写公司的项目,这项目是vue和element ui搭建的, 做的是一套电力系统的管理平台.  遇到一个小麻烦,用过element ui 的都知道,使用element ui 弹框,点击空白处,默认是 ...

  9. vue+element ui中select组件选择失效问题原因与解决方法

    codejing 2020-07-10 09:13:31  652  收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...

随机推荐

  1. CF-552E-Two Teams

    pro:给出n, k和长度为n的数组a, 两个人轮流取数1先取,设a[i]是当前数组中最大值,则取走a[i - k]到a[i + k]这段数,然后把a[i + k + 1]和后面的补到 a[i - k ...

  2. [LC] 253. Meeting Rooms II

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  3. nodejs express 框架 上传文件

    web 项目应用express4.0框架 html 表单post 文件上传失败,后端无法获取提交文件 express不支持文件上传. 方式一 若是图片,可以将图片转码为BASE64上传 前端框架ang ...

  4. redis的管理和监控工具treeNMS

    TreeNMS可以帮助您搭建起一套用于redis的监控管理系统,也支持Memcached,让您可以通过web的方式对数据库进行管理,有了它您就可以展示NOSQL数据库.编辑修改内容,另外还配备了sql ...

  5. Jacoco代码覆盖率工具

    https://www.cnblogs.com/fnng/p/7923314.html https://my.oschina.net/wangmengjun/blog/974067

  6. MySQL性能优化最佳实践 - 05 MySQL核心参数优化

    back_log参数的作用 指定MySQL可能的TCP/IP的连接数量(一个TCP/IP连接占256k),默认是50.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花 ...

  7. idea如何打包项目(java)

    1.右击项目打开open module settings 2.依次打开 3.选择你的程序主入口 JAR files from libraies ①和设置库中的jar文件选择第一个打包时会把依赖库(li ...

  8. 831. KMP字符串

    给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字. 模板串P在模式串S中多次作为子串出现. 求出模板串P在模式串S中所有出现的位置的起始下标. 输入格式 第一行输入整 ...

  9. tp5.1 请求时间格式化

    当前时间:{$Request.time|date='Y-m-d H:i:s'} 注意database.php的配置!记录一下!

  10. 拿到webshell之后的事情

    之前搞站都是搞到后台管理员,或者搞到webshell就宣布结束了,,今天终于有机会学习一下后面的操作了. 公司网站为php的站,已经拿到webshell.可以进行菜刀连接. 菜刀虚拟终端 php -m ...