以编程方式在vue

时间:2018-03-10 08:09:03

标签: javascript vue.js vuetify.js

我想问用户他想要创建多少个点然后获得每个点坐标。

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

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

   <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>

1 个答案:

答案 0 :(得分: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 : [],用于循环显示每个Coord输入

  3. nodes上设置观察程序,循环显示输入的节点数,并将那些对象{coordX: "", coordY: ""}推送到nodesArr数组

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

  5. x-coord输入绑定到相应的coordX属性,使用index
  6. 中的v-for
  7. 同样,y-coord输入绑定到相应的coordY属性,使用index
  8. 中的v-for
  9. 由于输入是使用v-model双向绑定的,因此您拥有nodesArr属性中的所有输入数据,可以根据需要使用