在父Vuejs中从孩子更改道具

时间:2018-10-02 04:23:44

标签: javascript html vue.js vuejs2 vuetify.js

所以我有一个带有四个选项卡的 Tabs.vue 组件:

<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>

现在我有了父组件 App.vue ,其中包含:

<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>

我的目标是在 Tabs.vue 中单击“第一标签”,然后在 App.vue 中将“ showFirstTab”从false更改为true。然后,如果我单击 Tabs.vue 中的第二个选项卡,则 App.vue 中的“ showFirstTab”变为false,而“ showSecondTab”变为true,依此类推。

P.S是的,我必须将这些道具保留在父组件中。

1 个答案:

答案 0 :(得分:5)

您可以emit event成为父母

showFirstTabFunc () {
  this.$emit('setActiveTab', 'showFirstTab')
}

在父母中

<app-tabs @setActiveTab="setActiveTab"></app-tabs>

methods: {
  setActiveTab (activeTab) {
    this.showFirstTab = false
    this.showSecondTab = false
    this.showThirdTab = false
    this.showTabFour = false
    this[activeTab] = true
  }
}