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. 子组件给父组件传递数据:自定义事件或模板引用
相关文章
|
5月前
|
JavaScript 前端开发 IDE
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
|
3月前
|
JavaScript 安全 开发工具
在 Vue 3 中使用 TypeScript
【10月更文挑战第3天】
|
5月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
56 3
|
5月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
105 1
|
5月前
|
资源调度 JavaScript 前端开发
Vue3+TypeScript前端项目新纪元:揭秘高效事件总线Mitt,轻松驾驭组件间通信的艺术!
【8月更文挑战第3天】Vue3结合TypeScript强化了类型安全与组件化开发。面对大型应用中复杂的组件通信挑战,可通过引入轻量级事件发射器Mitt实现事件总线模式。Mitt易于集成,通过简单几步即可完成安装与配置:安装Mitt、创建事件总线实例、并在组件中使用`emit`与`on`方法发送及监听事件。此外,利用TypeScript的强大类型系统确保事件处理器正确无误。这种方式有助于保持代码整洁、解耦组件,同时提高应用的可维护性和扩展性。不过,在大规模项目中需谨慎使用,以防事件流过于复杂难以管理。
147 1
|
5月前
|
开发框架 前端开发 JavaScript
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
|
5月前
|
开发框架 前端开发 JavaScript
在Vue3+TypeScript 前端项目中使用事件总线Mitt
在Vue3+TypeScript 前端项目中使用事件总线Mitt
|
5月前
|
JavaScript 前端开发 安全
立等可取的 Vue + Typescript 函数式组件实战
立等可取的 Vue + Typescript 函数式组件实战
|
5月前
|
JavaScript 前端开发 安全
解锁Vue3与TypeScript的完美搭档:getCurrentInstance带你高效打造未来前端
【8月更文挑战第21天】Vue3的getCurrentInstance方法作为Composition API的一部分,让开发者能在组件内访问实例。结合TypeScript,可通过定义组件实例类型实现更好的代码提示与类型检查,提升开发效率与代码质量。例如,定义一个带有特定属性(如myData)的组件实例类型,可以在setup中获取并安全地修改这些属性。这种方式确保了一致性和减少了运行时错误,使开发更加高效和安全。
235 0
|
5月前
|
JavaScript 测试技术 API
Vue 3 与 TypeScript:最佳实践详解
Vue 3 与 TypeScript:最佳实践详解

热门文章

最新文章