在vue3中使用setup新增这个特性可以使用函数式编程,在 <script setup>
中必须使用 defineProps 和 defineEmits API来声明 props
和 emits
<template>
<div>
<p @click="changeFn($event)">{{ foo }}</p>
</div>
</template>
<script setup>
import { defineEmits, defineProps } from "vue";
const emit = defineEmits(["change"]);//需要“注册”事件名
defineProps({
foo: {
type: String,
default: () => {
return "hello自定义组件";
},
},
});
function changeFn(event) {
emit("change", event);//这里去emit事件和传递参数
}
</script>
typescript写法:
<template>
<div>
<p @click="changeFn($event)">{{ foo }}</p>
</div>
</template>
<script setup lang="ts">
import { defineEmits, defineProps, withDefaults } from "vue";
interface Props {
foo: string;
}
interface Emit {
(e: "change", event?: MouseEvent): void;
}
const emit = defineEmits<Emit>();
const props = withDefaults(defineProps<Props>(), {
foo: "hello自定义组件",
});
function changeFn(event: MouseEvent) {
emit("change", event);
}
</script>
这里如果需要定义props的默认值需要withDefaults去定义