博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Vue开发的tab切换组件
阅读量:6329 次
发布时间:2019-06-22

本文共 4389 字,大约阅读时间需要 14 分钟。

github地址:

1、index.html

            
基于Vue开发的标签页组件
标签一的内容
标签二的内容
标签三的内容

 

2、tabs.js

Vue.component('tabs', {    template: `    
{
{item.label}}
`, data: function() { return { //将pane的标题保存到数组中 navList: [], //保存父组件的value到currentValue变量中,以便在本地维护 currentValue: this.value } }, props: { //接收父组件的value value: { type: [String] } }, methods: { //使用$children遍历子组件,得到所有的pane组件 getTabs: function() { return this.$children.filter(function(item) { return item.$options.name === 'pane'; }) }, //更新tabs updateNav() { this.navList = []; var _this = this; this.getTabs().forEach(function(pane, index) { _this.navList.push({ label: pane.label, name: pane.name || index }); //如果没有设置name,默认设置为索引值 if(!pane.name) { pane.name = index; } //设置第一个pane为当前显示的tab if(index === 0) { if(!_this.currentValue) { _this.currentValue = pane.name || index; } } }); this.updateStatus(); }, updateStatus() { var tabs = this.getTabs(); var _this = this; //显示当前选中的tab对应的pane组件,隐藏没有选中的 tabs.forEach(function(tab) { return tab.show = tab.name === _this.currentValue; }) }, tabCls: function(item) { return [ 'tabs-tab', { //为当前选中的tab加一个tabs-tab-active class 'tabs-tab-active': item.name === this.currentValue } ] }, //点击tab标题触发 handleChange: function(index) { var nav = this.navList[index]; var name = nav.name; //改变当前选中的tab,触发watch this.currentValue = name; //实现子组件与父组件通信 this.$emit('input', name); } }, watch: { value: function(val) { this.currentValue = val; }, currentValue: function() { //tab发生变化时,更新pane的显示状态 this.updateStatus(); } }})

 

3、pane.js

Vue.component('pane',{    template:`    
`, data:function(){ return { show:true } }, //props为来自父组件的变量,实现父组件与子组件通信 props:{ //设置pane的标识 name:{ type:String }, //label是设置标题 label:{ type:String, default:'' } }, methods:{ updateNav:function(){ //$parent 父链,通知父组件(tabs)进行更新。 //说明:在业务中尽可能不要使用$parent来操作父组件,$parent适合标签页这样的独立组件 this.$parent.updateNav(); } }, //监听label watch:{ label(){ this.updateNav(); } }, mounted(){ //初始化tabs this.updateNav(); }})

 

4、style.css

[v-cloak]{
display: none;}.tabs{
font-size: 14px; color: #657180;}.tabs-bar:after{
content: ''; display: block; width: 100%; height: 1px; background: #d7dde4; margin-top:-1px;}.tabs-tab{
display: inline-block; padding: 4px 16px; margin-right: 6px; background: #fff; border: 1px solid #d7dde4; cursor: pointer; position: relative;}.tabs-tab-active{
color: #3399ff; border-top: 1px solid #3399ff; border-bottom: 1px solid #3399ff;}.tabs-tab-active:before{
content: ''; display: block; height: 1px; background: #3399ff; position: absolute; top: 0; left: 0; right: 0;}.tabs-content{
padding: 8px 0;}

5、效果:

转载地址:http://puwoa.baihongyu.com/

你可能感兴趣的文章
[LeetCode] Merge Sorted Array
查看>>
BZOJ1187:[HNOI2007]神奇游乐园——题解
查看>>
BZOJ3930:[CQOI2015]选数——题解
查看>>
CGI FASTCGI php-fpm
查看>>
在fragment中获取Application数据
查看>>
详解CSS float属性(转)
查看>>
利用JDBC连接Oracle数据库(转)
查看>>
Java基本语法-----java流程控制语句
查看>>
【面试 网络协议】【第十四篇】网络协议篇
查看>>
指令汇B新闻客户端开发(二) 主页面布局
查看>>
获取文本区域(textarea)行数【换行获取输入用户名个数】
查看>>
Mysql常用命令详解
查看>>
Android中实现iPhone开关
查看>>
是男人就下100层【第二层】——帮美女更衣(1)
查看>>
Web应用程序设计十个建议
查看>>
//……关于报文
查看>>
C语言学习-进制转换、变量
查看>>
Base64编码及其作用
查看>>
20172304 2017-2018-2 《程序设计与数据结构》实验五报告
查看>>
第六周学习总结
查看>>