Vue 调用父子组件事件

一、父组件中调用子组件事件

父组件中引入子组件

<user-edit
  ref="userEdit"
  @close="handleUserEditClose"
  @success="handleUserEditSuccess"
  :userEditVisiable="userEdit.visiable"
/>

父组件如何调用子组件中的方法呢?

edit (record) {
  this.$refs.userEdit.setFormValues(record) // 调用子组件的方法
  this.$refs.userEdit.roleData // 获取子组件的属性
},

子组件中,定义 setFormValues 方法,代码如下:

setFormValues ({...user}) {
  console.log(user)
},

更多详情,请查看:Vue 官网之访问子组件实例或子元素

进阶版:

使用实例方法/事件 $on 和 $emit API 进行操作。

vm.$on(event, callback):监听当前实例上的自定义事件。事件可以由 vm.$emit 触发。回调函数会接收所有传入事件触发函数的额外参数。

vm.$emit(eventName, [...args]):触发当前实例上的事件。附加参数都会传给监听器回调。

edit (record) {
  this.$refs.userEdit.$emit('setFormValues', record) // 触发监听事件
},

子组件中如何监听呢?

monitoring() { // 监听事件
  this.$on('childMethod', (res) => {
    console.log(res)
  })
},

更多详情,请查看 Vue API

 二、子组件中如何调用父组件的事件

首先子组件里用 $emit 向父组件触发一个事件,父组件监听这个事件后做处理即可。

onClose () {
  this.$emit('close')
},

父组件监听事件,并且做出逻辑处理。

<user-edit
  ref="userEdit"
  @close="handleUserEditClose"
  :userEditVisiable="userEdit.visiable"
/>

handleUserEditClose () {
  this.userEdit.visiable = false
},

进阶版:将父组件的方法传入子组件中,在子组件中直接调用这个方法,即方法作为参数传入子组件中使用。

<user-edit
  ref="userEdit"
  :userEditVisiableClose="handleUserEditClose"
/>

handleUserEditClose () {
  this.userEdit.visiable = false
},

子组件中如何调用呢?

props: {
  userEditVisiableClose: {
    type: Function,
    default: null
  }
},

childMethod() { // 点击事件
  if (this.userEditVisiableClose) {
    this.userEditVisiableClose();
  }
}

官方提供一个直接调用父组件的方法:this.$parent.event。

直接在子组件中,使用 this.$parent.event,其中 event 就是父组件中的事件。

Vue 中 $parent 的含义

$parent 指向调用该组件的(父组件)实例,通过 this.$parent 可以访问到父组件上所有的 props、data 里面的数据信息和生命周期方法以及 methods 方法。同时我们可以通过 $parent 层叠可以一层一层地往上追溯各级父组件,比如 this.$parent.$parent.event。

更多详情,请查看 Vue 官网之访问父级组件实例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Vue3中父子组件之间的调用方法: 1. 组件组件传参: 在组件中使用props属性将数据传递给组件,在组件中通过props接收数据。 ```vue // 组件 <template> <div> <child-component :message="message"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { message: 'Hello from parent component' }; } }; </script> // 组件 <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] }; </script> ``` 2. 组件调用组件内的方法: 在组件中使用ref属性给组件命名,然后在组件中通过$refs来调用组件的方法。 ```vue // 组件 <template> <div> <child-component ref="child"></child-component> <button @click="callChildMethod">Call Child Method</button> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { callChildMethod() { this.$refs.child.childMethod(); } } }; </script> // 组件 <template> <div> <p>Child Component</p> </div> </template> <script> export default { methods: { childMethod() { console.log('Child method called'); } } }; </script> ``` 3. 组件调用组件的方法: 在组件中使用v-on指令给组件绑定一个自定义事件,在组件中通过$emit方法触发该事件,并传递数据给组件。 ```vue // 组件 <template> <div> <child-component @custom-event="handleCustomEvent"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { handleCustomEvent(data) { console.log('Custom event received:', data); } } }; </script> // 组件 <template> <div> <button @click="emitCustomEvent">Emit Custom Event</button> </div> </template> <script> export default { methods: { emitCustomEvent() { this.$emit('custom-event', 'Custom data'); } } }; </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值