Vue3父组件调用子组件的方法
前言:今天在开发落地页项目的时候,有这样的一个业务:
- 角色在登录之后,需要知道这个用户是否之前有绑定过角色,
- 因为一个账号有多个角色,但是能够领取奖励的只能有一个角色
- 所以需要知道这个用户是否有绑定过角色,如果有,那么直接跳过绑定角色这一步,如果没有,转到绑定角色的弹窗去。
- 但是现在就有个问题,我弹窗是自己做的一个用来装其他,比如登录框、绑定框、选择账号框的一个父组件,这里用到的绑定角色框是其中的一个子组件。
- 但是绑定角色里面的逻辑业务是需要在这个子组件里面调用的,不能放在像pinia、vuex里面这种公共区域调用,也不能放在别的组件中调用,所以现在有这样一个需求,vue3中父组件调用子组件的方法
实现方法
在网上看到很多都是说用ref给子组件绑定一个值,然后在子组件中通过defineExpose将要调用的方法暴露出去。
但是弄了很多次,子组件ref绑定的值一直是undefined,不知道是不是我操作姿势不知道还是什么。
vue3-eventbus
这是一个很好用的插件,类似于vue2中的事件总线,特别好用,只需要在要被调用的子组件中用bus.on(),设置要监听的方法名和,触发的函数。
在全局注册
1 | import eventBus from 'vue3-eventbus' |
在子组件中
1 | <script setup> |
在父组件中
1 | function bindOnlyRole(){ |
此外,这个也能用于子组件与子组件、子组件与父组件间等等的传值、方法调用,很好用。
使用方法基本都差不多,要调用方法的组件中,用bus.on()来监听要触发的方法,在其他组件中用bus.emit()来触发相关方法,用方法名来做依据。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AliveSeven's Blog!
评论