【发布时间】:2021-07-09 21:37:00
【问题描述】:
我正在寻找一个关于如何编写自定义组件的示例,该组件将多个选项显示为单选按钮(作为道具传递给自定义组件),其中只有一个单选按钮被选中,并且有两个方式绑定。 我还需要使用 Composition API。
我现在有这个自定义组件:
<template>
<Label :label="fieldLabel" :required="required" />
<div v-for="item in items" :key="item.id">
<input type="radio" :value="item.id" @input="$emit('input:model', $event.target.value)">
{{ item.label }}
</div>
</template>
<script>
import { db } from '@/firebase/config'
import { onMounted, ref } from '@vue/runtime-core';
import Label from './Label'
export default {
name: 'RadioInput',
components: {
Label
},
props: ['item', 'label', 'model', 'sortby', 'sortorder'],
emits: ['input:model'],
setup(props) {
const fieldLabel = props.label ? props.label : null
const item = props.item
const items = ref([])
const model = props.model;
const required = props.required !== undefined ? props.required : false;
const sortBy = props.sortby !== undefined ? props.sortby : 'label';
const sortOrder = props.sortorder !== undefined ? props.sortorder : 'asc';
onMounted(() => {
// Get the collection from firestore
db.collection(item).orderBy(sortBy, sortOrder).get()
.then(res => {
items.value = res.docs.map(doc => {
return { ...doc.data(), id: doc.id }
})
})
})
return { fieldLabel, items, model, required }
}
}
</script>
这些项目是从 Firebase 集合中获取的,它工作得非常好。我的问题是我可以单独检查所有单选按钮并且它们都保持选中状态。并且选择的值没有被绑定。
我有一个使用自定义单选组输入组件的例子是这样的:
<RadioInput :label="'Commercial Status'" :item="'commercial_status'" :sortby="'sort_order'" :sortorder="'asc'" v-model:model="commercialStatusId" :required="false" />
选择前的结果如下:
但是我可以检查所有单选按钮,并且应该同时检查一个:
【问题讨论】: