前端使用vue,项目中使用的是element ui组件,在使用select下拉框多选时,新增记录时select多选下拉框正常使用,没问题。但是在编辑记录时,编辑界面也为select下拉框赋值了,却没有显示数据。
先放一个select多选下拉框编辑时正确的加载数据的显示效果图:
下拉框代码如下:
<el-form-item label="设备属性" prop="setId">
<el-select v-model="dataForm.setId" multiple class="filter-item" placeholder="请选择设备属性" >
<el-option v-for="item in deviceTypeOptions" :key="item.deviceTypeId" :label="item.deviceTypeName" :value="item.deviceTypeId" />
</el-select>
</el-form-item>
将后端返回的字符串在转换成数组时,转换成整形数组,下拉框即可正确显示。
代码如下:
// 显示编辑界面
handleEdit: function (row) {
this.editDialogVisible = true
this.operation = false
this.dataForm = Object.assign({}, row)
var arrIntSet = []
if(null!=row.setId&&""!=row.setId){
// 将字符串转换成数组,此时是字符串数组
var arrString = row.setId.split(',')
// 将字符串数组的每一项转换成Number,生成一个新的数组
for (var arrInt in arrString) {
arrIntSet.push(parseInt(arrString[arrInt]))
}
}
// 将新的Number数组,绑定到select空间的v-model上
this.dataForm.setId = arrIntSet
}
数据保存传值到后台,代码如下:
submitForm: function () {
this.$refs.dataForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.editLoading = true
//多选框数据处理
let s = []
for(var i = 0; i < this.dataForm.setId.length; i++) {
s.push(this.dataForm.setId[i])
}
this.dataForm.setId = s.join()
let params = Object.assign({}, this.dataForm)
saveOrUpdate(params).then((res) => {
if(res.code == 20000) {
this.$message({ message: '操作成功', type: 'success' })
} else {
this.$message({message: '操作失败, ' + res.msg, type: 'error'})
}
this.editLoading = false
this.$refs['dataForm'].resetFields()
this.editDialogVisible = false
this.findPage()
})
})
}
})
},