Reputation: 637
So I have a Tabs.vue component with four tabs:
<template>
.
.
<v-tab href="#tab-1" @click="showFirstTabFunc">
First Tab
<v-icon>check_box_outline_blank</v-icon>
</v-tab>
<v-tab href="#tab-2" @click="showSecondTabFunc">
Second Tab
<v-icon>indeterminate_check_box</v-icon>
</v-tab>
<v-tab href="#tab-3" @click="showThirdTabFunc">
Third Tab
<v-icon>memory</v-icon>
</v-tab>
<v-tab href="#tab-4" @click="showTabFourFunc">
Fourth Tab
<v-icon>list_alt</v-icon>
</v-tab>
.
.
</template>
<script>
.
.
methods:{
showFirstTabFunc(){
},
showSecondTabFunc(){
},
showThirdTabFunc(){
},
showFourthTabFunc(){
},
.
.
</script>
Now I have the parent component App.vue which contains:
<template>
.
.
<app-tabs></app-tabs>
.
.
</template>
<script>
import Tabs from "./Tabs.vue";
export default {
data() {
return {
showFirstTab: false,
showSecondTab: false,
showThirdTab: false,
showTabFour: false,
}
},
components:{
appTabs: Tabs
}
}
</script>
My goal is to click on let's say First Tab in Tabs.vue and by doing so changing the "showFirstTab" from false to true in App.vue. And then if I click on the second tab in Tabs.vue "showFirstTab" in App.vue becomes false and "showSecondTab" becomes true and so on.
P.S yes I have to keep those props in the parent component.
Upvotes: 0
Views: 351
Reputation: 22403
You can emit event to parent
showFirstTabFunc () {
this.$emit('setActiveTab', 'showFirstTab')
}
In Parent
<app-tabs @setActiveTab="setActiveTab"></app-tabs>
methods: {
setActiveTab (activeTab) {
this.showFirstTab = false
this.showSecondTab = false
this.showThirdTab = false
this.showTabFour = false
this[activeTab] = true
}
}
Upvotes: 6