如何仅接受一个组件作为vue中的插槽

kiayqfof  于 2023-01-26  发布在  Vue.js
关注(0)|答案(2)|浏览(186)

我有一个按钮组组件,我想这个组件只接受按钮组件,我创建为插槽。
这是我的ButtonGroup组件:

<template>
  <div class="button-group">
    <slot />
  </div>
</template>

<script lang="ts">

export default {
  name: 'ButtonGroup',

  components: {
    Button,
  },
};
</script>

我怎样才能只接受按钮组件作为插槽?

afdcj2ne

afdcj2ne1#

使用渲染函数

<script>
import {h} from 'vue';

export default {
  name: 'ButtonGroup',
  render() {
    const buttons = []
    for (let defaultElement of this.$slots.default()) {
      // case: <button />
      if (defaultElement.type === 'button') {
        buttons.push(defaultElement)
      }
      
      // other component
      // if (defaultElement.type.name === 'Button') {
      //   buttons.push(defaultElement)
      // }
    }
    return h('div', {class: 'button-group'}, buttons)
  }
};
</script>

我在这里引用了https://vuejs.org/api/render-function.html

avwztpqn

avwztpqn2#

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<template>
  <div class="button-group">
    <slot name="button">
     <Button />
    </slot>

  </div>
</template>

<script lang="ts">

export default {
  name: 'ButtonGroup',

  components: {
    Button,
  },
};
</script>

//Use of ButtonGroup component`enter code here`

<ButtonGroup>
 <template #button />
</ButtonGroup>

相关问题