Vue3+TypeScript学习笔记(八)

简介: 本节记录父子组件传参和自定义事件相关内容
  1. 父组件给子组件传递参数主要有两种方法,props和attribute透传,此处暂时只介绍props。

    • props:当在父组件中引入子组件后,直接将要传递的参数写在子组件的标签上,同时在子组件的脚本中定义好传过来的数据即可
    • 注意:withDefaults()是ts特有的函数,接收两个参数。第一个是defineProps()函数,第二个是一个配置对象,用于定义props的默认初始值
<template>
    <div>父组件</div>
    <hr />
    <waterFall
        :name="'小满经常发红包'"
    ></waterFall>
</template>
<script setup lang="ts">
</script>
<template>
  <div>子组件</div>
  <div>{{ name }}</div>
</template>
<script setup lang="ts">
  import { ref, reactive } from 'vue'

  /** 父组件给子组件传递数据 */
  const props = defineProps<{
      name:string,
      age?:number        // 设置参数可选
  }>()

  // 如果需要设置默认值
  const props = withDefaults(
    defineProps<{
      name: string
    }>(),
    {
      name: '让小满试试刀吧',
    }
  )
  console.log(props.name)
</script>
  1. 子组件给父组件传递数据有自定义事件和模板引用两种方法:

    • 自定义事件:把回调留在父组件中,在子组件里触发对应事件执行回调,TS新增了事件验证机制,可以预先定义事件名称和回调函数参数列表及返回值
<template>
    <div>父组件</div>
    <hr />
    <waterFall
        @on-click="get"
    ></waterFall>
</template>

<script setup lang="ts">
import waterFall from './components/water-fall.vue';
import { ref,reactive,onMounted } from 'vue'
const get = (name:string) => {
    console.log(name)
}
// 第十二章已看完
</script>
<template>
    <div>子组件</div>
    <div>{{ name }}</div>
    <button @click="send">点我给父组件发送数据</button>
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
/** 子组件给父组件传递数据 */

// 第一种方法:自定义事件(将回调留在父组件中,通过子组件触发事件执行回调)
// JS写法:
// const emit = defineEmits(['on-click'])
// TS写法:(增加了事件验证机制)
const emit = defineEmits<{
  // 这里用于限制emit()调用时的参数列表
    (e: 'on-click', params: string): void
}>()
const send = () => {
    emit('on-click', '小满嗷嗷叫')
}
</script>

<style scoped></style>
  • 模板引用:在父组件中使用defineExpose函数将特定变量或方法暴露给子组件,子组件通过模板引用的方式获取
  • 注意:初始化模板引用必须在挂载之前,挂载之后通过变量访问。如果在挂载之后才初始化会显示undefined
<template>
    <div>父组件</div>
    <hr />
    <waterFall
        ref="wall"
    ></waterFall>
</template>
<script setup lang="ts">
import waterFall from './components/water-fall.vue';
import { ref,reactive,onMounted } from 'vue'
// 注意:为模板引用赋值必须在onMounted之前,否则将获取不到
let wall = ref<InstanceType<typeof waterFall>>()
onMounted(()=>{
    // let wall = ref<InstanceType<typeof waterFall>>()     // wall=Ref<undefined>,初始化模板引用必须在挂载之前
    console.log(wall.value?.age)    // 666
})
</script>
<template>
    <div>子组件</div>
    <div>{{ name }}</div>
    <button @click="send">点我给父组件发送数据</button>
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
/** 子组件给父组件传递数据 */

// 第二种方法:模板引用获取
defineExpose({
    age: 666,
})
</script>

小结:

  1. 父组件给子组件传递数据:Props和attribute透传
  2. 子组件给父组件传递数据:自定义事件或模板引用
相关文章
|
10月前
|
JavaScript 前端开发 安全
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
每日激励:“如果没有天赋,那就一直重复”。我是蒋星熠Jaxonic,一名执着于代码宇宙的星际旅人。用Vue 3与TypeScript构建高效、可维护的前端系统,分享Composition API、状态管理、性能优化等实战经验,助力技术进阶。
1268 1
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
|
JavaScript 前端开发 IDE
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
|
自然语言处理 JavaScript 前端开发
一夜获千星!已获 1.7k+,Art Design Pro:Vue3 + Vite + TypeScript 打造的高颜值管理系统模板,这个让后端小哥直呼救命的后台系统
Art Design Pro 是一款基于 Vue 3、Vite 和 TypeScript 的高颜值后台管理系统模板,已获 1.7k+ 星标。项目专注于用户体验与视觉设计,支持主题切换、多语言、权限管理及图表展示等功能,内置常用业务组件,便于快速搭建现代化管理界面。其技术栈先进,开发体验流畅,适配多设备,满足企业级应用需求。项目地址:[GitHub](https://github.com/Daymychen/art-design-pro)。
2419 11
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
550 22
|
JavaScript 安全 前端开发
Gzm Design:开源神器!用 Vue3、Vite4、TypeScript 革新海报设计,免费开源的海报设计器,主流技术打造,轻松高效
海报设计在各个领域都有着广泛的应用,无论是商业广告、活动宣传还是个人创意表达。今天要给大家介绍一款免费开源的海报设计器——Gzm Design,它基于最新的主流技术开发,为用户提供了丰富的功能,让海报设计变得轻松又高效。
872 64
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
914 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
|
JavaScript 安全 开发工具
在 Vue 3 中使用 TypeScript
【10月更文挑战第3天】
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
365 3
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
539 1
|
JavaScript 前端开发 安全
立等可取的 Vue + Typescript 函数式组件实战
立等可取的 Vue + Typescript 函数式组件实战