在vue js中,如何使用通过插槽渲染的复选框来调用子组件方法

问题描述

我有一个父级组件:

<my-component>
  <template v-slot:myslot>
    <b-form-group
       label="SlotEG"
       label-for="sltLbl"
       label-class="font-weight-bold pt-0"
    >
      <b-form-checkBox
        :id="myId"
        :name="myName"
      ></b-form-checkBox>
    </b-form-group>
  </template>
<my-component>

在我的子组件中,我有方法,我需要在单击复选框以捕获复选框事件的同时调用方法

<template>
  <b-col cols="3" v-if="hasMySlot()">
    <slot name="myslot"></slot>
  </b-col>
</template>

<script>
export default {
  methods:{
    myMethod() {
      alert("Hi")
    }
  }
}
</script>

解决方法

使用scoped slot传递方法:

<!-- MyComponent -->
<slot name="myslot" :myMethod="myMethod" />

然后,您可以destructure the slot prop使用传递的方法,并将其绑定到复选框的处理程序:

<!-- Parent -->
<my-component>
  <template v-slot:myslot="{ myMethod }">
    ...
    <b-form-checkbox @checked="myMethod" />
  </template>
</my-component>

demo

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...