Реализация RadioButtonGroup на Vue 3

Пробую сделать релизацию группы компонентов по подобию фреймворков

      <BaseRadioGroup v-model="input_value" name="gender">
        <BaseRadioItem label="Мужской" value="man"   />
        <BaseRadioItem label="Женский" value="woman" />
      </BaseRadioGroup>
      <p>Value: {{ input_value }}</p>

BaseRadioGroup.vue

<template>
  <div class="radio-container">
    <slot></slot>
  </div>
</template>
<script setup>
import {defineProps} from "vue";

defineProps({
  name: String,
})
</script>

В сам слот пробовал передать name, но он считает что это название слота, также пробовал через v-bind="$attrs", ничего не получается.

BaseRadioItem.vue

<template>
  <label>
    <input :checked="checked"
           :name="name"
           :value="value"
           type="radio"
           @change="handleChange">
    <slot><span v-html="label"></span></slot>
  </label>
</template>

<script setup>
import {computed, defineEmits, defineProps} from "vue";

const props = defineProps({
  name: String,
  value: String,
  label: String,
  modelValue: String,
})
const checked = computed(() => props.value === props.modelValue);
const emit = defineEmits(['update:model-value'])
const handleChange = event => emit('update:model-value', event.target.value);
</script>

Получить название группы удалось только через $parent.$attrs, но только в шаблоне, и, кажется, это плохая практика использовать $parent.


Ответы (0 шт):