为什么这个子事件不在父级(Vue)中更新状态

我有一个名为 customize-charts 的组件,其中包含一个 Vuetify 抽屉:


<template>

  <v-col>

    <v-btn style="float: right" class="mr-4 mt-2" small @click="toggleCustomize"  v-if="!open">Customize Dashboard</v-btn>

    <v-navigation-drawer

      v-model="open"

      temporary

      absolute

      right

      style="width: 25vw"

    >

      <span>draw contents</span>

      <v-divider />

    </v-navigation-drawer>

  </v-col>

</template>

<script>

export default {

  props: {

    data: {

      type: Array,

      default () { return [] }

    },

    open: {

      type: Boolean,

      default () { return false }

    }

  },

  data () {

    return {

      draggingItem: null

    }

  },

  methods: {

    toggleCustomize () {

      this.$emit('open')

    }

  }

}

</script>

如您所见,抽屉正在监听的布尔值称为“打开”,它是从父级传递的:


  <customize-charts v-if="chartCards.length" :data="chartCards" :open="customizePanel" @updateorder="updateOrder" @toggleshow="toggleShow" @open="customizePanel=!customizePanel"/> 

父母还有以下内容:


{

  data () {

    return {

       customizePanel: false,

    }

  }

我的问题是,当open调用自定义事件 (@open="customizePanel=!customizePanel") 时,抽屉会打开,但当它关闭时(用户在抽屉外单击)它不会设置为customizePanelfalse。我怎样才能做到这一点?


一只甜甜圈
浏览 94回答 1
1回答

慕的地6264312

问题是您正在使用 prop openwith v-model. Props 仅设计为一种数据绑定方式(将数据从父级传递给子级),您不应该修改它在子组件中的值(如果您打开浏览器开发工具,我相信您会看到来自 Vue 的很好的警告,对此进行了解释)因为新值将在下次重新渲染时被父值覆盖...只需将计算属性用于v-model:computed: {&nbsp; isOpen: {&nbsp; &nbsp;get() { return this.open }, // return prop value&nbsp; &nbsp;set() { this.$emit('open') } // emit event and change prop value in parent's event handler - new value gets propagated back to child&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript