Javascript 使用表单(Vue.js)的响应在JSON文件中保存数据集属性
我试图构建一个JSON文件,在其中存储表单中的所有答案。一些输入具有额外的数据集属性(数据标记)。在保存表单时,我希望将JSON文件中的所有这些“标记”提取为键和输入值。我试图通过向这些输入添加引用并使用$refs标记名称来实现这一点 我得到一个错误: v-on处理程序中出错:“TypeError:无法读取未定义的属性“push” 我正在尝试将“标记”存储在一个单独的数组中,然后将其附加到表单输出中 不确定这是否是正确的解决方案,但我想不出任何其他方法,所以如果您有任何其他想法,请随意Javascript 使用表单(Vue.js)的响应在JSON文件中保存数据集属性,javascript,json,laravel,vue.js,vuetify.js,Javascript,Json,Laravel,Vue.js,Vuetify.js,我试图构建一个JSON文件,在其中存储表单中的所有答案。一些输入具有额外的数据集属性(数据标记)。在保存表单时,我希望将JSON文件中的所有这些“标记”提取为键和输入值。我试图通过向这些输入添加引用并使用$refs标记名称来实现这一点 我得到一个错误: v-on处理程序中出错:“TypeError:无法读取未定义的属性“push” 我正在尝试将“标记”存储在一个单独的数组中,然后将其附加到表单输出中 不确定这是否是正确的解决方案,但我想不出任何其他方法,所以如果您有任何其他想法,请随意 Vue
- Vue.js版本:2.6
- vuetify.js版本:2.3
<v-text-field label="ICD" id="pos_t_1" name="pos_t_1" ref="icd" data-tag="icd_tag" v-
model="textfield" hide-details="auto" />
<v-radio-group v-model="radio" hide-details="auto" row>
<v-radio
v-for="radio in group"
ref="radioGroup"
:key="radio.id"
:id="radio.id"
:name="radio.id"
color="primary"
:data-tag="radio.tag"
:label="radio.text"
:value="radio.text"
>
</v-radio>
</v-radio-group>
我想要的JSON结构:
[{
"pos_t_1":"Test",
"icd_tag":"Test",
"pos_r_2":"",
"radio_tag_2":"",
"pos_r_3":"Radio 3",
"radio_tag_3":"Radio 3",
"pos_r_4":"",
"radio_tag_4":"",
"pos_r_5":"",
"radio_tag_5":"",
}],
当您尝试推送到空数组时,无法推送到指定的键,因为它不存在 因此,当您声明
tags=[]
然后尝试推送tags[key]时,推送(value)
tags[key]未定义,因此推送方法不可用
相反,您可以更改onSubmit方法,如下所示
onSubmit(){
Object.keys(this.$refs).forEach((值)=>{
常量参考值=此。$refs[值];
if(数组.isArray(参考文献)){
对于(设i=0;i当您尝试推送到空数组时,您无法推送到指定的键,因为它不存在
因此,当您声明tags=[]
然后尝试推送tags[key]时,推送(value)
tags[key]未定义,因此推送方法不可用
相反,您可以更改onSubmit方法,如下所示
onSubmit(){
Object.keys(this.$refs).forEach((值)=>{
常量参考值=此。$refs[值];
if(数组.isArray(参考文献)){
因为(让i=0;i多亏了@Donkarnash,我这样做了:
Object.keys(this.$refs).forEach((value) => {
const refs = this.$refs[value];
if (Array.isArray(refs)) {
for (let i = 0; i < refs.length; i++) {
let key = refs[i].$attrs['data-tag']
if (refs[i].isActive === true) {
this.tags[key] = this.radio
}
else {
this.tags[key] = ''
}
}
} else {
let key = refs.$attrs['data-tag']
this.tags[key] = this.textfield
}
})
Object.keys(this.$refs).forEach((值)=>{
常量参考值=此。$refs[值];
if(数组.isArray(参考文献)){
对于(设i=0;i
也许这对其他人也有帮助。多亏了@Donkarnash,我才这样做:
Object.keys(this.$refs).forEach((value) => {
const refs = this.$refs[value];
if (Array.isArray(refs)) {
for (let i = 0; i < refs.length; i++) {
let key = refs[i].$attrs['data-tag']
if (refs[i].isActive === true) {
this.tags[key] = this.radio
}
else {
this.tags[key] = ''
}
}
} else {
let key = refs.$attrs['data-tag']
this.tags[key] = this.textfield
}
})
Object.keys(this.$refs).forEach((值)=>{
常量参考值=此。$refs[值];
if(数组.isArray(参考文献)){
对于(设i=0;i
也许这对其他人也有帮助。谢谢你的回答。tags[key]=这个.textfield对文本字段有效。我的收音机有另一个问题。当我尝试这个时。tags[key]=this.radio在for循环中,所有无线电标记从所选无线电中获得相同的值,但我需要该值仅用于所选无线电中的所选标记,其余标记必须为空。您有解决方法吗?我不知道vuetify。但您可以执行一些条件操作,如this.refs[I]['data-tag']=='radio.tag'&&this.$refs[i].选中){this.tags[key]=this.radio}其他{this.tags[key]=''}
谢谢你的回答,this.tags[key]=this.textfield对文本字段有效。我对收音机有另一个问题。当我尝试这个时。tags[key]=this.radio在for循环中,所有无线电标记从所选无线电中获得相同的值,但我需要该值仅用于所选无线电中的所选标记,其余标记必须为空。您有解决方法吗?我不知道vuetify。但您可以执行一些条件操作,如this.refs[I]['data-tag']=='radio.tag'&&this.$refs[i].选中){this.tags[key]=this.radio}其他{this.tags[key]='}
Object.keys(this.$refs).forEach((value) => {
const refs = this.$refs[value];
if (Array.isArray(refs)) {
for (let i = 0; i < refs.length; i++) {
let key = refs[i].$attrs['data-tag']
if (refs[i].isActive === true) {
this.tags[key] = this.radio
}
else {
this.tags[key] = ''
}
}
} else {
let key = refs.$attrs['data-tag']
this.tags[key] = this.textfield
}
})