编写简单的<el-form>表单时,可以使用<el-col>用来进行布局,让相关的组件放在同一行。但是今天使用时发现有两个问题:
<el-row>
<el-col>
</el-col>
</el-row>
①如果用上以上这样的格式,布局无效
②如果不用<el-row>标签,则form表单的组件点击无效
问题原理:
经过查找之后发现,源码中在el-form-item.vue的代码中发现了这样一个计算属性:
-
form() {
-
let parent = this.$parent;
-
let parentName = parent.$options.componentName;
-
while (parentName !== 'ElForm') {
-
if (parentName === 'ElFormItem') {
-
this.isNested = true;
-
}
-
parent = parent.$parent;
-
parentName = parent.$options.componentName;
-
}
-
return parent;
-
},
这里通过当前组件,一级一级向上找,直到找到el-form组件就返回,而其他计算属性/方法依赖form计算属性,这也就能解释为什么remark表单项能正常点击,而name和type表单项无法点击的问题了。
解决方法:
只使用 <el-col>,但使用时注意套住所有组件(即<el-form-item>),我在使用时忘记套用submit按钮,导致只有按钮可以点击,而其他组件点击无效。