首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用vuejs动态创建模型时从DOM控件获取值

如何在使用vuejs动态创建模型时从DOM控件获取值
EN

Stack Overflow用户
提问于 2018-11-12 13:25:36
回答 1查看 1K关注 0票数 3

我正在创建一个动态表单生成器组件,其中要显示的DOM控件是从一个API服务中填充的。模型键,即:v-模型也是动态添加的。我无法访问用户在DOM控件中输入的数据。

将所有数据传递给表单生成器的组件。

代码语言:javascript
复制
<template>
   <form-generator :schema="schema" :model="model" :options="formOptions"></form-generator>
</template>
<script>
   export default {
      components: {
        FormGenerator
      },
      data() {
        return {
          model: {},
          schema: {
            fields: [{"id":"dcno1","label":"DC No.","model":"dcno","name":"dcno","ref":"dcno","className":"","type":"input","inputType":"text","required":true,"order":2}]
          }
      }
    }
</script>

在上面的代码中,模型和schema.fields是从异步axios调用中填充的。

如果我们在模型中传递名为"dcno“的值,则输入控件中的值将被填充。

动态表单生成器组件

代码语言:javascript
复制
<template>
   <v-form v-if='schema!==null' v-model="model.valid" ref="form" lazy-validation>
     <v-flex xs6 v-for='(formItem,index) in schema.fields' v-bind:key='index'>
         <v-text-field :v-model='formItem.model' ref="formItem.model" 
            :label='formItem.label' :rules='formItem.rules' 
            :value='model[formItem.model]'
            :type='formItem.inputType' :value='model[formItem.model]' 
            :id='formItem.id'>
         </v-text-field>
      </v-flex>
      <v-btn class='float-right' color="primary" @click="submitForm">Submit</v-btn>
   </v-form>
</template>
<script>
   export default {
     name: 'form-generator',
     components: {
     },
     props: {
     schema: Object,
     model: Object
     },
     methods:{
         submitForm: function(e) {
            //how to access the form model values here
         }
     }
   }
</script>

当将静态值传递给模型dcno,:value =‘model formItem.model’时,将显示该值。考虑字段键有一组控件。请帮助我在提交函数中获取表单的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-13 08:42:16

正如您在文档中看到的,您不能更改组件属性的值,您需要在内部组件中创建一个支持对象,并将其值发送到主组件。看看这个示例,我根据模式结构创建了innerModel,然后通过查看innerModel发出对它的所有更改。

代码语言:javascript
复制
Vue.config.devtools = false;
Vue.config.productionTip = false;
const formGenerator = Vue.component('form-generator', {
  props: ['schema', 'value'],
  data() {
    return {
      innerModel: [],
    }
  },
  watch: {
    schema: {
      deep: true,
      immediate: true,
      handler() {
        this.innerModel = this.schema.fields.map((field) => ({
          // pass here any other property you need
          name: field.name,
          value: field.model,
        }));
      },
    },
    innerModel: {
      deep: true,
      immediate: true,
      handler(value) {
        this.$emit('input', value);
      },
    }
  },
  methods: {
    submitForm: function(e) {
      e.preventDefault();
      // convert innerModel into an object if needed
      console.log(this.innerModel);
    }
  },
  template: `
  	<form @submit="submitForm">
    	<input
      	:key="model.name"
        v-model="model.value"
        v-for="model in innerModel">
    	<button type="submit">SUBMIT</button>
    </form>
  `
})

new Vue({
  el: '#app',
  components: {
    formGenerator
  },
  data: {
    model: {},
    schema: {
      fields: [{
        id: "dcno1",
        label: "DC No.",
        model: "dcno",
        name: "dcno",
        ref: "dcno",
        className: "",
        type: "input",
        inputType: "text",
        required: true,
        order: 2
      }]
    }
  }
})
代码语言:javascript
复制
<script src="https://unpkg.com/vue"></script>

<div id="app">
  <form-generator :schema="schema" v-model="model"></form-generator>
  <h2>Changing model</h2>
  {{ model }}
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53263159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档