これは私の作業コードの一部です。私はいくつかのフォームフィールドを持っているかもしれないコンポーネントを作成しました。 JSONのすべてです 私はループを作成し、テキスト、オプション、チェックボックス、星の4つのコンポーネント(評価用)を繰り返しました。
<div v-for="(elem, ind) in problem.problem_config.structure">
<con-text v-if="elem.type === 'text'"
:element="elem"
v-on:edit="editField"
:value="getFilledValue(elem.id)"
:key="elem.id"></con-text>
<con-option v-if="elem.type === 'option'"
:element="elem"
v-on:edit="editField"
:value="getFilledValue(elem.id)"
:key="elem.id"></con-option>
<con-checkbox v-if="elem.type === 'checkbox'"
:element="elem"
v-on:edit="editField"
:value="getFilledValue(elem.id)"
:key="elem.id"></con-checkbox>
<con-stars v-if="elem.type === 'stars'"
:element="elem"
v-on:edit="editField"
:value="getFilledValue(elem.id)"
:key="elem.id"></con-stars>
</div>
例えばテキスト入力は、この
<template>
<div class="field" style="margin-bottom:14px">
<label>{{element.name}}</label>
<input
type="text"
:placeholder="element.description"
:maxlength="element.filter.max_length"
v-model="content"
>
<p class="description">{{element.description}}</p>
</div>
</template>
<script>
export default {
name: 'con-text',
props: ['element', 'value'],
data: function() {
return {
content: this.value ? this.value : ''
}
},
watch: {
content: function (val) {
let obj = {
id: this.element.id,
name: this.element.name,
type: this.element.type,
value: val,
description: this.element.description
}
this.$emit('edit', obj)
}
}
}
</script>
オプションフォームのようになります。
<template>
<div class="field" style="margin-bottom:14px">
<label>{{element.name}}</label>
<select class="ui fluid dropdown" v-model="content">
<option disabled value="">{{element.description}}</option>
<option v-for="opt of element.value" :key="opt.value" :value="opt.value">
{{opt.label}}
</option>
</select>
<p class="description">{{element.description}}</p>
</div>
</template>
<script>
/* global $ */
export default {
name: 'con-option',
props: ['element', 'value'],
data: function() {
return {
content: this.value ? this.value.value : null
}
},
watch: {
content: function (val) {
let selectedEl = this.element.value.find(o => o.value === val)
let valObj = {value: val, label: selectedEl.label}
let obj = {
id: this.element.id,
name: this.element.name,
type: this.element.type,
value: valObj,
description: this.element.description
}
this.$emit('edit', obj)
}
},
mounted: function() {
$('select.dropdown').dropdown()
}
}
</script>
基本的な考え方は、構成要素として、各フィールドを作成し、そこにプロパティを渡すことです。そしてあなたは今よりも多くのカスタムフォームを作ることができます。
ようこそスタックオーバーフロー!実際の投稿内に問題を記述し、関連コードを含めることは常に必要です。リンクが壊れたり、信頼できない可能性があります。あなたの質問の内容を含め、[良い質問をする](https://stackoverflow.com/help/how-to-ask)のヘルプページを参照してください。 – thanksd