mha
mha

Reputation: 637

Changing props from child in parent Vuejs

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

Answers (1)

ittus
ittus

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

Related Questions