【问题标题】:Programmatically create forms in vue以编程方式在 vue 中创建表单
【发布时间】:2018-03-10 08:09:02
【问题描述】:

我想问用户他想创建多少点,然后得到每个点的坐标。

我尝试创建一个初始文本字段来获取多少点,然后创建一个循环来创建每个表单。它有效,但我不知道如何获取每个表单值。

如何获取每个表单的值?或者有更好的方法吗?

   <template>
      <div>
        <v-card class="mb-3">
          <v-card-text>
            <v-text-field label="How many nodes" :value="nodes" @input="onInput" type="number"></v-text-field>
          </v-card-text>
        </v-card>
        <v-container fluid grid-list-md>
          <v-layout row wrap>
            <template v-for="i in nodes">
              <v-flex :key="i" xs12 md3>
                <div>
                  <v-card class="mb-3">
                    <v-card-text>
                      <div>Node {{i}}</div>
                      <v-text-field label="Coord X" value="x1" @input="getValues" type="number" v-model="no1"></v-text-field>
                      <v-text-field label="Coord Y" :value="y1" @input="getValues" type="number"></v-text-field>
                    </v-card-text>
                  </v-card>
                </div>
              </v-flex>
            </template>
          </v-layout>
        </v-container>
      </div>
    </template>
    <script>
      export default {
        data () {
          return {
            nodes: 2
          }
        },
        methods: {
          onInput (val) {
            this.nodes = parseInt(val)
          }
        }
      }
    </script>

【问题讨论】:

    标签: javascript vue.js vuetify.js


    【解决方案1】:

    我认为这是一个更好的方法:

       <template>
          <div>
            <v-card class="mb-3">
              <v-card-text>
                <v-text-field label="How many nodes" v-model="nodes" type="number"></v-text-field>
              </v-card-text>
            </v-card>
            <v-container fluid grid-list-md>
              <v-layout row wrap>
                <template v-for="(node, index) in nodesArr">
                  <v-flex :key="i" xs12 md3>
                    <div>
                      <v-card class="mb-3">
                        <v-card-text>
                          <div>Node {{index + 1}}</div>
                          <v-text-field label="Coord X" v-model="node[index].coordX" type="number" v-model="no1"></v-text-field>
                          <v-text-field label="Coord Y" v-model="node[index].coordY" type="number"></v-text-field>
                        </v-card-text>
                      </v-card>
                    </div>
                  </v-flex>
                </template>
              </v-layout>
            </v-container>
          </div>
        </template>
        <script>
          export default {
            data () {
              return {
                nodes: 0,
                nodesArr: []
              }
            },
            watch: {
                nodes(newVal) {
                    this.nodesArr = [];
                    for(var i=0; i<this.nodes; i++){
                        this.nodesArr.push({coordX: "", coordY: ""});
                    }
                }
            },
            methods: {
            }
          }
        </script>
    

    发生了什么:

    1. 在输入上设置一个v-model,它接受节点数并将其绑定到nodes 属性。

    2. 初始化了一个新属性nodesArr : [],用于循环显示每个坐标输入

    3. nodes 上设置一个观察器,它循环输入的节点数并将{coordX: "", coordY: ""} 的许多对象推送到nodesArr 数组

    4. 我们使用 v-for="(node, index) in nodesArr" 循环遍历 nodesArr 以显示 x 坐标和 y 坐标的输入

    5. x-coord 输入绑定到相应的coordX 属性,利用我们在v-for 中得到的index
    6. 同样,y 坐标输入绑定到相应的coordY 属性,利用我们在v-for 中得到的index
    7. 由于输入是使用v-model 进行双向绑定的,因此您在nodesArr 属性中拥有所有输入数据,可以随意使用

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2018-07-04
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多