Vue3 双向绑定报错

2021-11-29 21:45:48 +08:00
 17681880207

用到的组件:el-drawer

父组件:

<template>
  <div>
    <el-button
        type="primary"
        @click="openDetailsDrawer">
      View Details
    </el-button>
    <p>{{ myDrawer.visible }}</p>

    <details-drawer
        v-model:visible="myDrawer.visible"
        :payload="myDrawer.payload"/>
  </div>
</template>
<script lang="ts" setup>
import {reactive, nextTick, ref} from 'vue'
import DetailsDrawer from './components/DetailsDrawer/index.vue'

const myDrawer = reactive({
  visible: false,
  payload: {
    title: '',
    content: ''
  }
})

const openDetailsDrawer = () => {
  myDrawer.visible = true
  nextTick(() => {
    myDrawer.payload.title = '标题' + new Date().getTime()
    myDrawer.payload.content = '内容' + new Date().getTime()
  })
}
</script>

子组件:

<template>
  <el-drawer
      v-model="visible"
      :title="payload.title"
      :before-close="updateVisible">
    <template #default>
      {{ payload.content }}
      <el-button @click="handleClose">Close</el-button>
    </template>
  </el-drawer>
</template>
<script lang="ts" setup>
import {defineProps, defineEmits} from 'vue'

const props = defineProps({
  visible: {
    type: Boolean,
    default: false
  },
  payload: {
    type: Object,
    default: () => {
      return {}
    }
  }
})

const emits = defineEmits<{
  (e: 'update:visible', visible: boolean): void
}>()

const updateVisible = () => {
  emits('update:visible', false)
}
</script>

问题
不论我在子组件<el-drawser/>

  1. :before-close ;
  2. @closed ;
  3. @close ;

任何一个方法调用 updateVisible 方法,都会报如下错误:

ReferenceError: visible is not defined
839 次点击
所在节点    问与答
1 条回复
oyadubanana
2021-11-30 16:20:12 +08:00
解决了吗?
另外就是,defineProps 和 defineEmits 不需要引入。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818865

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX