element-ui Tabs 标签页刷新页面状态不丢失
element-ui Tabs 标签页刷新页面状态不丢失
效果
一般在使用Tabs组件,我们选择了标签2后刷新,tab组件会重新回到标签1,每次都需要在刷新后从新选择标签页。给人感觉不友好。
要求
- 尽量减少代码更改
- 记录当前tag选中信息,刷新后可以反选
思路
- 使用directives监听tab加载与切换
- 使用mixins确保全局可调用
- 在directives切换将信息写入到query中,刷新页面时读取query中信息进行反选
实现
- 首先创建mixins文件
param2Obj 方法
export function param2Obj (url) {
const search = url.split('?')[1];
if (!search) {
return {}
}
return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}');
}
mixins/index.js
import { param2Obj } from '@/utils/index'
// 全局引用方法
export default {
// v-tab-change:activeName="setActiveName"
directives: {
'tab-change': {
// 绑定时读取query是否有action字段
bind(el, binding) {
let param = param2Obj(window.location.href)
if (param.active) {
binding.value({ action: 'setActiveName', key: binding.arg}, param.active);
}
},
// 切换时query写入action字段
update(el, binding) {
// setTimeout(0) 等待dom完成后进行操作
setTimeout(() => {
let param = param2Obj(window.location.href)
// 获取dom
// 此处详见 注1
let queryList = document.querySelectorAll('.el-tabs__item')
for (let index = 0; index < queryList.length; index++) {
const item = queryList[index]
if (item.className.indexOf('is-active') !== -1) {
let activeName = item.id.split('-')[1]
// 防止重复调用push方法
if (param.active !== activeName) {
binding.value({ action: 'setPath' }, activeName);
}
}
}
}, 0);
}
}
},
methods: {
setActiveName({ action, key }, activeName) {
// 写入tabs默认值
if (action === 'setActiveName') {
this[key] = activeName
} else {
// 使用 replace 方法防止产生记录
this.$router.replace({
query: {
active: activeName
}
})
}
}
}
}
- 在main.js中全局引用
// 全局mixin
import mixinsIndex from '@/mixins/index'
Vue.mixin(mixinsIndex)
- 使用
<template>
<!-- activeName为当前绑定的v-model,key值。 setActiveName是mixin定义的方法 -->
<el-tabs v-model="activeName" v-tab-change:activeName="setActiveName">
<el-tab-pane label="tab1" name="tab1">tab1 </el-tab-pane>
<el-tab-pane label="tab2" name="tab2">tab2 </el-tab-pane>
<el-tab-pane label="tab3" name="tab3">tab3</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
name: 'tabDemo',
data () {
return {
activeName: 'tab1'
}
}
}
</script>
注1:
is-active
为当前选中的tab,class中包含当前的name值
element-ui Tabs 标签页刷新页面状态不丢失的更多相关文章
- element ui tabs 标签页支持展开收起修改
<template> <div class="com-resource-legend" style=""> <el-tabs ty ...
- easyui,获取tabs标签页内容,以及刷新datagrid
因为先点开tab页xxx查看表格,再点另一个tab页xxxx修改部分信息,再切换到tab页xxx,tab页xxx里的datagrid表格不会刷新,显示不了修改的信息(在此tab页按F5刷新可以解决,但 ...
- 布局-EasyUI Panel 面板、EasyUI Tabs 标签页/选项卡、EasyUI Accordion 折叠面板、EasyUI Layout 布局
EasyUI Panel 面板 通过 $.fn.panel.defaults 重写默认的 defaults. 面板(panel)当做其他内容的容器使用.它是创建其他组件(比如:Layout 布局.Ta ...
- tabs标签页的数据缓存
一进入tabs标签页默认就将所有标签页的数据请求到,并渲染到页面上, 这样如果数据量太大的话会渲染很久, 我的需求就是点击不同的标签时再请求数据,同时对点击过的标签页数据进行缓存,下次点击时不再重新请 ...
- 踩iviewui中Tabs 标签页数据绑定坑
今天小颖要实现点击Tabs 标签页中每个标签,并动态获取当前点击的标签值. 一句话说不清楚,那就看动态图吧 小颖一开始看官网写的代码是: <template> <Tabs :valu ...
- JSF中使用f:ajax标签无刷新页面改变数据
ajax本是用在前端的一种异步请求数据的操作,广泛用于js中,一般的js框架如jq都有被封装好的方法,用于发起异步请求操作.异步操作可以增强用户体验和操作,越来越多的程序都在使用ajax.JSF的fa ...
- HTML:模拟链接被按下,在新标签页打开页面,不使用window.open(可能被拦截)
当按下一个按钮时,想打开一个新的标签页,可以使用window.open去实现但是因为使用window.open在新窗口或者新标签页中打开页面,有可能被浏览器给拦截.为了解决这个问题,可以模拟链接被按下 ...
- (转载)HTML:模拟链接被按下,在新标签页打开页面,不使用window.open(可能被拦截)
原文: http://www.cppblog.com/biao/archive/2010/08/21/124196.html 当按下一个按钮时,想打开一个新的标签页,可以使用window.open去实 ...
- 关于button标签会刷新页面的问题
当button标签在form表单里面时,这时点击button按钮会提交表单刷新页面. <form action=""> <button>点击</but ...
- js实现在新标签页打开页面
这种方法打开新标签页要在IE9+以上浏览器才可以! <html> <head> <meta http-equiv="Content-type" con ...
随机推荐
- 安装原版Windows自动安装已经备份的驱动
安装完Windows10后联网会自动更新驱动,除了自动更新.如果不让新安装的Windows系统自动安装驱动以外,还有自己手动安装驱动的方式.如何在安装系统过程中就让系统自己安装好驱动? 重装系统首先要 ...
- Wiki.js配置LDAP认证
安装好wikijs 之后, 可以进行进一步的详细配置. 这里介绍 LDAP 认证的配置. 在 管理 -> 身份验证 -> 添加策略 -> 选择 LDAP/AD , 如下: 接下来进行 ...
- 使用kubeadm快速启用一个集群
使用kubeadm快速启用一个集群 CentOS 配置YUM源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] n ...
- 强大的 apt-get 命令
强大的 apt-get 命令(小结) 一.ubuntu下管理软件最方便的非 apt-get 工具莫属了,它的常见用法稍微整理一下供以后参考(详细见 man apt-get ): 1.更新源,升级软件和 ...
- Go语言实现简单分布式系统
使用Go语言实现比较简单的分布式系统,这个系统中采用多个分布式模型,即混合模型,并且基于HTTP进行通信,传输JSON数据 github链接: https://github.com/T4t4KAU/d ...
- 论文解析 -- A Survey of AIOps Methods for Failure Management
此篇Survey是A Systematic Mapping Study in AIOps的后续研究 对于AIOPS中占比较高的Failure Management进行进一步的研究 Compared t ...
- QUIC协议 对比 TCP/UDP 协议
QUIC协议是HTTP3引入的,所以需要了解HTTP的版本迭代. HTTP1.x 队头阻塞:下个请求必须在前一个请求返回后才能发出,导致带宽无法被充分利用,后续请求被阻塞(HTTP 1.1 尝试使用流 ...
- 一天吃透SpringMVC面试八股文
说说你对 SpringMVC 的理解 SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个模块. 它通过一套注解,让一个简单的Jav ...
- 深度学习--LSTM网络、使用方法、实战情感分类问题
深度学习--LSTM网络.使用方法.实战情感分类问题 1.LSTM基础 长短期记忆网络(Long Short-Term Memory,简称LSTM),是RNN的一种,为了解决RNN存在长期依赖问题而设 ...
- go slice使用
1. 简介 在go中,slice是一种动态数组类型,其底层实现中使用了数组.slice有以下特点: *slice本身并不是数组,它只是一个引用类型,包含了一个指向底层数组的指针,以及长度和容量. *s ...