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. ...
随机推荐
- HashMap 与 HashSet 联系
HashMap实现 Map接口 HashSet实现Collection接口 HashSet底层是HashMap 好的 记住这个就可以了 HashSet只存放key, value: private ...
- MyBatis 传List参数 nested exception is org.apache.ibatis.binding.BindingException: Parameter 'idList' not found.
在MyBatis传入List参数时,MyBatis报错:nested exception is org.apache.ibatis.binding.BindingException: Paramete ...
- Solving the Top ERP and CRM Metadata Challenges with erwin & Silwood
Registrationhttps://register.gotowebinar.com/register/3486582555108619010 Solving the Top ERP and CR ...
- Laravel 入口文件解读及生命周期
这里只贴index.php的代码, 深入了解的请访问 https://laravel-china.org/articles/10421/depth-mining-of-laravel-life- ...
- Jekins相关笔记
Jekins忘记密码操作 https://blog.csdn.net/intelrain/article/details/78749635 Jekins重启 https://www.cnblogs.c ...
- jsp篇 之 jsp中的注释
Jsp中的注释: 第一种: <!-- html/xml中的注释方式 --> 特点: 1.用户在浏览器中右键查看源代码 [能] 看到这个注释. 2.在服务器端,这个jsp页面被翻译成的jav ...
- LOJ #2719. 「NOI2018」冒泡排序(组合数 + 树状数组)
题意 给你一个长为 \(n\) 的排列 \(p\) ,问你有多少个等长的排列满足 字典序比 \(p\) 大 : 它进行冒泡排序所需要交换的次数可以取到下界,也就是令第 \(i\) 个数为 \(a_i\ ...
- Linux内核参数
vm.overcommit_memory 0 - 表示内核将检查是否有足够的可用内存供应用进程使用:如果有足够的可用内存,内存申请允许:否则,内存申请失败,并把错误返回给应用进程. 1 - 表示内核允 ...
- Window下Eclipse+Tomcat远程调试
需求: 项目在开发环境跑得好好的,但是当发布到服务器上时,却出现了一些意外的问题.服务器上不可能给你装IDE调试工具啊,又没有很好的日志帮助下,这时候就用到了JVM的Java Platfo ...
- Mac版 IntelliJ Idea使用系列(一)
当连续import同一个包的多个类时,Idea会自动改成import xxx.*; 办法:修改Names count to use static import with '*'