前端框架 :vue2.x
第三方ui组件:ElementUI
操作系统:windows
浏览器:chrome 谷歌
问题描述
表单使用中,没有在data中提前声明参数,当数据回显时,表单无法输入
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px"><el-form-item label="文件路径" prop="path"><el-input v-model="queryParams.path" placeholder="请输入文件路径" clearable @keyup.enter.native="handleQuery" /></el-form-item><el-form-item label="创建时间" prop="createTime"><el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss"type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期":default-time="['00:00:00', '23:59:59']" /></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button></el-form-item>
</el-form>
<script>export default {created(){this.queryParams.path="http"},data() {return {queryParams: {pageNo: 1,pageSize: 10,},}},methods: {/**搜索按钮操作**/handleQuery() {console.log(this.queryParams)},}
}
</script>
解决方法
- 方法1:如果在data中提前声明参数path,当数据回显时,表单可以输入
data() {return {queryParams: {pageNo: 1,pageSize: 10,path:''},}
},
- 方法2:如果在data中不提前声明参数,那么在数据回显时,使用
Object.assign()
created(){this.queryParams= Object.assign({},this.queryParams,{path:'gttp'})},
data() {return {queryParams: {pageNo: 1,pageSize: 10,},}
},
结论
关于表单初始化数据要不要在data中提前声明,声不声名都会走响应式系统,例如不声明,表单不填写数据,新增接口是不会出现该参数的,但是,如果涉及到更新接口,页面表单会回显数据,那么要注意赋值表单的方法,比如this.queryParams.path
,由于vue2对后添加的数据不会劫持,所以,要么表单参数在data中提前声明,要么用Object.assign()
的方法。