vue3+ts组件练习(defineExpose defineEmits defineProps)

lxf2024-04-06 13:21:07

  这篇文章练习的点共有三个:

  defineExpose => 组件向外暴露的自身的属性和方法

  defineEmits => 组件向外暴露的自定义方法

  defineProps => 组件可以传入的值

  我们将一个一个来练习使用

  我们先使用 vite 创建一个工程项目 我起名为 practice-app

  如下图选择就可以完成创建,再根据提示 cd practice-app 安装依赖之后就可以运行了

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  接下来,打开项目目录 src 打开 App.vue 将里面的内容替换成空白

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  在 components 文件下新建文件 YaHooTest.vue 写一点基础的东西,然后就在 App.vue 文件引入后就准备开始练习了

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  defineExpose 可以向外暴露组件的属性值和方法,我们一个一个来测试属性值

  我们先简单写好一个输入框,将输入框的值作为向外暴露的属性值

  App.vue

  YaHooTest.vue

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  这个文字内容完全是属于组件的一部分,和父组件是一点关系都没有,但是通过 defineExpose 的方式可以将子组件的属性值进行显示.方法

  那么我们接下来向外暴露方法

  我们简单写一个 显示/隐藏 子组件内容人物信息卡的方法,其中,人物信息卡的内容我们暂时写死,之后再通过 defineProps 从父组件获取

  App.vue

  YaHooTest.vue

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  这样一来就可以通过子组件提供的方法来打开人物信息卡了

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  接下来我们来测试 defineProps 这个东东 我们将之前的人物信息卡里面的信息通过父组件传递进来

  App.vue

  YaHooTest.vue

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  这样一来我们的值就从父组件传递到子组件当中去了,其中,我们用到了 ts 的泛型和类型断言

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  可以看到,显示效果和之前写死是一样的

  那么接下来,我们就来写组件的自定义事件,组件向外暴露的方法

  我们写一个当输入框的内容为 hello shaoyahu 的时候就弹出一个窗口的事件,当然了,为了好看一些,我决定将弹出事件延迟100毫秒

  我们使用监听器来判断输入框的内容是否是我们想要的值

  App.vue

  YaHooTest.vue

  vue3+ts组件练习(defineExpose defineEmits defineProps)

  OK ,那么效果就是这样一个效果了,我们成功的触发了我们的自定义事件