Vue управляется данными, для этого вам не нужны функции:
{
...,
data(){
return {
...,
active: 'first',
tabs: ["first", "second", "third"]
}
}
}
<b-tabs content-class="mt-3">
<b-tab
v-for="tab in tabs"
:key="tab"
:title="tab"
:active="active==tab"
@click="active=tab"
:style="`display:${active==tab? 'block':'none}`'"
>
<p>I'm the {{tab}} tab</p>
</b-tab>
</b-tabs>
Хорошо, расширяем это для взаимодействия с компонентом b-collapse
{
props: ["tab", "active"],
computed(){
collapse: {
get: function(){
return this.active == this.tab
},
set: function(value){
this.$emit('update:active', this.tab)
}
}
}
}
<!-- wrap in component for prop management -> no collapse[tab] needed than -->
<template>
<b-collapse
role="tabpanel"
v-model="collapse"
><slot></slot></b-collapse>
</template>
<!-- then in scope of tabs -->
<wrapped-collapse
v-for="tab in tabs"
:key="tab"
:active.sync="active" :tab="tab"
>...</wrapped-collapse>