select タグのエラーメッセージ表示付きコンポーネント
import { computed } from 'https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js'; import { getWrapClass, generalizeOptions } from 'https://wws.jp/_export/code/vuejs/vue3/form_utils?codeblock=0'; const SelectForm = { template: ` <div :class="computedControlWrapperClasses" :style="controlWrapperStyles"> <select class="form-control" :class="controlClasses" :style="controlStyles" :value="value" v-bind="$attrs" @input="updateValue($event.target.value)" @change="changeValue($event.target.value)" > <option v-for="opt in computedOptions" :value="opt.value" :class="optionClasses" :style="optionStyles" >{{ opt.title }}</option> </select> <div :class="computedMessageWrapperClasses" :style="messageWrapperStyles"> <template v-for="msg in errors"> <span>{{ msg }}</span><br> </template> </div> </div> `, props: { value: { type: String }, options: { type: Array, default: [] }, errors: { type: Array, default: [] }, controlWrapperClasses: { type: Array, default: [] }, controlWrapperStyles: { type: Object, default: {} }, controlClasses: { type: Array, default: [] }, controlStyles: { type: Object, default: {} }, optionClasses: { type: Array, default: [] }, optionStyles: { type: Object, default: {} }, messageWrapperClasses: { type: Array, default: [] }, messageWrapperStyles: { type: Object, default: {} }, controlErrorClass: { type: String, default: 'has-error' }, messageErrorClass: { type: String, default: 'text-danger' }, }, setup(props, context) { const computedControlWrapperClasses = computed(() => { return getWrapClass( props.errors, props.controlWrapperClasses, props.controlErrorClass ) }) const computedMessageWrapperClasses = computed(() => { return getWrapClass( props.errors, props.messageWrapperClasses, props.messageErrorClass ) }) const computedOptions = computed(() => { return generalizeOptions(props.options) }) function updateValue(v) { context.emit('update:value', v) } function changeValue(v) { context.emit('change:value', v) } return { computedControlWrapperClasses, computedMessageWrapperClasses, computedOptions, changeValue, updateValue } } }; export default SelectForm;
Property | Type | Default | Description |
---|---|---|---|
options | Array | [] | select タグの選択肢 option を指定 { title: 表示名, value: 値 } 形式のオブジェクトを要素とする配列 または、要素に “title” プロパティが存在しない場合、単に値の配列として { title: 値, value: 値 } の配列に自動的に変換される |
value | String | v-model プロパティとして value を持つ | |
controlWrapperClasses | Array | [] | select を囲う div タグに反映するクラス |
controlWrapperStyles | Object | {} | select を囲う div タグに反映するスタイル |
controlClasses | Array | [] | 入力コントロールに反映するクラス |
controlStyles | Object | {} | 入力コントロールに反映するスタイル |
optionClasses | Array | [] | 選択肢に反映するクラス |
optionStyles | Object | {} | 選択肢に反映するスタイル |
messageWrapperClasses | Array | [] | エラーメッセージを囲う div タグに反映するクラス |
errors | Array | [] | エラーメッセージの配列 |
controlErrorClass | String | 'has-error' | コントロールに反映するエラークラス |
messageErrorClass | String | 'text-danger' | エラーメッセージに反映するエラークラス |
Event | Value |
---|---|
update:value | 選択された値 |