vue3_父组件调用子组件的某个方法

父组件:

<template>
  <div class="father">
    <el-button @click="handle">触发子组件事件</el-button>
    <child ref="children"/>
  </div>
</template>

<script setup lang="ts">
import {ref} from 'vue'
import child from './child.vue';

const children = ref()
function handle(){
    children.value.clickChild()
}
</script>

子组件:

<template>
  <div class="child">
    我是子组件
  </div>
</template>

<script setup lang="ts">
import {ref} from 'vue'

defineExpose({clickChild})
function clickChild(){
    console.log('我被触发了!');
}
</script>

使用 <script setup> 的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。
可以通过 defineExpose 编译器宏来显式指定在

### Vue3 父组件调用子组件方法的最佳实践 在 Vue 3 的组合式 API 中,父组件可以通过 `ref` 和 `defineExpose` 来实现对子组件方法调用。以下是具体的实现方式: #### 子组件定义方法并暴露接口 在子组件中,使用 `defineExpose` 显式声明哪些属性或方法可以被父组件访问。这有助于控制对外部的暴露范围。 ```javascript <script setup> import { ref } from &#39;vue&#39;; const childMethod = () => { console.log(&#39;This is a method in the child component&#39;); }; // 使用 defineExpose 暴露方法父组件 defineExpose({ childMethod }); </script> <template> <div>Child Component</div> </template> ``` 此部分代码展示了如何在子组件中定义一个名为 `childMethod` 的函数,并通过 `defineExpose` 将其暴露出去[^1]。 #### 父组件引用子组件实例 父组件需要通过 `ref` 创建一个响应式的引用变量来保存子组件实例。随后,在模板中将该引用绑定到子组件上。 ```html <template> <div> Parent Component <!-- 绑定子组件 --> <ChildComponent ref="childRef" /> <button @click="callChildMethod">Call Child Method</button> </div> </template> <script setup> import { ref } from &#39;vue&#39;; import ChildComponent from &#39;./ChildComponent.vue&#39;; // 假设这是子组件路径 const childRef = ref(null); const callChildMethod = () => { if (childRef.value && typeof childRef.value.childMethod === &#39;function&#39;) { childRef.value.childMethod(); // 调用子组件中的方法 } }; </script> ``` 上述代码片段说明了如何在父组件中创建一个 `ref` 变量 (`childRef`) 并将其绑定至 `<ChildComponent>` 上。当点击按钮时,会触发 `callChildMethod` 函数,进而调用子组件公开的方法。 #### 实现细节与注意事项 - **显式暴露**:推荐始终使用 `defineExpose` 来明确指定可被外界访问的内容,从而减少不必要的数据泄露风险。 - **类型安全**:如果项目启用了 TypeScript,则可以在 `defineExpose` 部分提供类型提示以增强开发体验。 - **生命周期管理**:确保在尝试调用子组件方法之前,子组件已经完成挂载阶段;否则可能会遇到未初始化的情况。 ### 总结 Vue 3 提供了一种清晰且可控的方式来让父组件调用子组件内的逻辑处理功能。借助于现代语法特性如 Composition API 和 `defineExpose`,开发者能够更加灵活地设计父子组件之间的交互模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值