vue3 中,使用typescript时,要怎样去定义自定义事件的回调函数类型。

发布于 2022-09-13 00:17:19 字数 1284 浏览 23 评论 0

例如我有两个组件,一个是 Child 组件,会触发一个自定义事件 change, 并且会传递一些数据出去。
另一个是 Parent 组件,会使用 Child 组件,并且监听 Child 组件的 change 事件。

代码如下:

Child.vue

<template>
  <button @click="onClick">emit an event</button>
</template>
<script lang="ts">
  import { defineComponent } from 'vue'
  export default defineComponent({
    emits: ['change'],
    setup(props, {emit}) {
       function onClick () {
         emit('change', 'This is string type payload')
       }
       
       return { onClick }
    }
  })
</script>

Parent.vue

<template>
  <child @change="onChange" />
</template>
<script lang="ts">
  import { defineComponent } from 'vue'
  import Child from './Child.vue'

  export default defineComponent({
    components: {Child},
    setup(props) {
       function onChange (payload: string) {
           console.log(payload)
       }
       
       return { onChange }
    }
  })
</script>

Parent 中,其实是感知不到 Child 组件的 change 事件会带上什么类型的参数的,因为在 Child 中根本没有定义 hanlder 的类型。

所以在 Child 中要怎样定义自定义事件的类型呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

琉璃梦幻 2022-09-20 00:17:19

Parent.vue中定义一个method就可以了。

<!-- Parent.vue -->
<template>
  <Child @change="onChange" />
</template>
<script>
import { defineComponent } from "vue";
import Child from "./Child.vue";

export default defineComponent({
  components: { Child },
  methods: {
    onChange(payload) {
      console.log(payload);
    },
  },
});
</script>

在线地址:https://codesandbox.io/s/vue3...

另外,Vue3的setup中是无法使用methods的,因为在执行setup时,组件实例还没有被创建。

Vue3文档说明

访问组件的 property
执行 setup 时,组件实例尚未被创建。因此,你只能访问以下 property:props、attrs、slots、emit
换句话说,你将无法访问以下组件选项:data、computed、methods

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文