@Niki4h

Как сделать компонент радио-кнопок на Vue?

Здравствуйте. Увидел у Vuetify пример работы с радио-кнопками:

<template>
  <v-container
    class="px-0"
    fluid
  >
    <v-radio-group v-model="radioGroup">
      <v-radio
        v-for="n in 3"
        :key="n"
        :label="`Radio ${n}`"
        :value="n"
      ></v-radio>
    </v-radio-group>
  </v-container>
</template>

<script>
  export default {
    data () {
      return {
        radioGroup: 1,
      }
    },
  }
</script>


То есть компонент v-radio-group как-то отслеживает v-radio внутри и возвращает выбранный вариант. Собственно, вот и появился вопрос как сделать такое же поведение, вместо нескольких v-radio с v-model на одну переменную?
  • Вопрос задан
  • 465 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Vue 2, options API
Компонент радиогруппы:

props: [ 'value' ],
provide() {
  return {
    radioGroup: this,
  };
},

Компонент радиокнопки:

props: [ 'value' ],
inject: [ 'radioGroup' ],

<input
  type="radio"
  :value="value"
  :checked="radioGroup.value === value"
  @change="radioGroup.$emit('input', value)"
>

https://jsfiddle.net/d7aow8fq/

Vue 3, composition API
Компонент радиогруппы:

props: [ 'modelValue' ],
emits: [ 'update:modelValue' ],
setup(props, { emit }) {
  provide('radioGroupValue', computed({
    get: () => props.modelValue,
    set: v => emit('update:modelValue', v),
  }));
},

Компонент радиокнопки:

props: [ 'value' ],
setup() {
  return {
    radioGroupValue: inject('radioGroupValue'),
  };
},

<input
  type="radio"
  :value="value"
  v-model="radioGroupValue"
>

https://jsfiddle.net/d7aow8fq/2/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы