對於動態增減表單項,Element UI 官方文檔表單那一節已經介紹得很清楚了,我之前沒有看見,繞了很多彎路,這里針對點擊按鈕增刪一排輸入框的問題做一個總結。
效果圖如下

存在一排必填的姓名與手機號,點擊增加后會新增一行,點擊每行后面的刪除圖標則會刪除該行

必填項很簡單,就是普通表單:
<el-form
ref="form"
:rules="formRules"
:inline="true"
:model="form"
label-width="80px"
>
<!-- 固定項目 -->
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" palceholder="請輸入姓名">
</el-input>
</el-form-item>
<el-form-item label="手機號" prop="phone">
<el-input v-model="form.phone" palceholder="請輸入手機號">
</el-input>
</el-form-item>
</el-form>
<el-button @click="addItem" type="primary">增加</el-button>
export default {
name: 'dynamicForm',
data () {
return {
form: {
name: '',
phone: ''
},
formRules: {
name: [{required: true, message: '請輸入姓名', trigger: 'blur'}],
phone: [
{required: true, message: '請輸入手機號', trigger: 'blur'},
{ pattern: /^1[34578]\d{9}$/, message: '目前只支持中國大陸的手機號碼' }
]
}
}
}
}
動態表單部分:
<!-- 動態增加項目 -->
<!-- 不止一個項目,用div包裹起來 -->
<div v-for="(item, index) in form.dynamicItem" :key="index">
<el-form-item
label="姓名"
:prop="'dynamicItem.' + index + '.name'"
:rules="{
required: true, message: '姓名不能為空', trigger: 'blur'
}"
>
<el-input v-model="item.name"></el-input>
</el-form-item>
<el-form-item
label="手機號"
:prop="'dynamicItem.' + index + '.phone'"
:rules="[
{required: true, message: '手機號不能為空', trigger: 'blur'},
{ pattern: /^1[34578]\d{9}$/, message: '目前只支持中國大陸的手機號碼' }
]"
>
<el-input v-model="item.phone"></el-input>
</el-form-item>
<el-form-item>
<i class="el-icon-delete" @click="deleteItem(item, index)"></i>
</el-form-item>
</div>
在data 的 form 里增加 dynamicItem
form: {
name: '',
phone: '',
dynamicItem: []
}
在methods里增加方法
methods: {
addItem () {
this.form.dynamicItem.push({
name: '',
phone: ''
})
},
deleteItem (item, index) {
this.form.dynamicItem.splice(index, 1)
}
}
每次點擊增加按鈕,會在dynamicItem里增加新的項,反映到頁面上就是新增了一排輸入框;而點擊刪除的時候,則通過index找到當前行刪掉。

