以编程方式在 vue 中创建表单
Programmatically create forms in vue
我想问用户他想创建多少个点,然后得到每个点的坐标。
我尝试创建一个初始文本字段来获取多少分,然后创建一个循环来创建每个表单。它有效,但我不知道如何获取每个表单值。
如何获取每个表单的值?或者有更好的方法吗?
<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>
我认为这样做会更好:
<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>
发生了什么:
在输入上设置一个v-model
,它接受节点数并将其绑定到nodes
属性.
初始化了一个新的属性nodesArr : []
,它将用于循环显示每个坐标输入
在 nodes
上设置一个观察器,它循环遍历输入的节点数并将那么多对象 {coordX: "", coordY: ""}
推送到 nodesArr
数组
我们使用 v-for="(node, index) in nodesArr"
遍历 nodesArr
以显示 x-coord 和 y-coord
的输入
- x-coord 输入绑定到相应的
coordX
属性 利用我们在 v-for
中得到的 index
- 类似地,y-coord 输入绑定到相应的
coordY
属性,利用我们在 v-for
中得到的 index
- 由于使用
v-model
双向绑定输入,因此您拥有 nodesArr
属性 中的所有输入数据,可以根据需要使用
我想问用户他想创建多少个点,然后得到每个点的坐标。
我尝试创建一个初始文本字段来获取多少分,然后创建一个循环来创建每个表单。它有效,但我不知道如何获取每个表单值。
如何获取每个表单的值?或者有更好的方法吗?
<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>
我认为这样做会更好:
<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>
发生了什么:
在输入上设置一个
v-model
,它接受节点数并将其绑定到nodes
属性.初始化了一个新的属性
nodesArr : []
,它将用于循环显示每个坐标输入在
nodes
上设置一个观察器,它循环遍历输入的节点数并将那么多对象{coordX: "", coordY: ""}
推送到nodesArr
数组我们使用
v-for="(node, index) in nodesArr"
遍历nodesArr
以显示 x-coord 和 y-coord 的输入
- x-coord 输入绑定到相应的
coordX
属性 利用我们在v-for
中得到的 - 类似地,y-coord 输入绑定到相应的
coordY
属性,利用我们在v-for
中得到的 - 由于使用
v-model
双向绑定输入,因此您拥有nodesArr
属性 中的所有输入数据,可以根据需要使用
index
index