\
\
\
\
',
props: {
value: {
type: [String, Number]
}
},
data: function () {
return {
//用于渲染tabs的标题
currentValue: this.value,
navList: []
}
},
methods: {
tabCls(item){
return [
'tabs-tab',
{
'tabs-tab-active': item.name === this.currentValue
}
]
},
getTabs(){
//通过遍历子组件,得到所有的pane组件
return this.$children.filter(function (item) {
return item.$options.name === 'pane';
});
},
updateNav(){
this.navList = [];
//设置对this的引用,在function回调里,this的指向的并不是Vue实例
var _this = this;
this.getTabs().forEach((pane, index) => {
_this.navList.push({
label: pane.label,
name: pane.name || index
});
//如果没有给pane设置name,默认设置它的索引
if(!pane.name)
pane.name = index;
//设置当前选中的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(tab => {
return tab.show = tab.name === _this.currentValue;
});
},
handleChange: function (index) {
var nav = this.navList[index];
var name = nav.name;
this.currentValue = name;
this.$emit('input', name);
this.$emit('on-click', name);
}
},
watch: {
value: val => {
this.currentValue = val;
},
currentValue: function () {
this.updateStatus();
}
}
});
标签页嵌套的组件pane pane.js
Vue.component('pane',{
name: 'pane',
template: '\
\
\
',
data: function () {
return {
show: true
}
},
props: {
name: String
},
label: {
type: String,
default: ''
},
methods: {
updateNav: function () {
this.$parent.updateNav();
}
},
watch: {
label: function () {
this.updateNav();
}
},
mounted: function () {
this.updateNav();
}
});
以上就是如何在Vue.js中使用标签页组件,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
分享标题:如何在Vue.js中使用标签页组件
标题网址:
http://www.zsjierui.cn/article/iecdop.html