仿ElementUI实现一个Form表单的实现代码

2020-06-14 06:24:33易采站长站整理

initValue: '223',
};
},
};
</script>

 

2. FormItem 的设计


<el-form-item label="用户名" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>

在 ElementUI 的

formItem
中,我们可以看到:

需要

label
来显示名称;
需要
prop
来校验当前项;
需要给
input
button
预留插槽;

根据上面的需求,我们可以创建出自己的

formItem
,新建一个 FormItem.vue 文件 。


<template>
<div>
<!-- 解释一 -->
<label v-if="label">{{ label }}</label>
<div>
<!-- 解释二 -->
<slot></slot>
<!-- 解释三 -->
<p v-if="validateState === 'error'" class="error">{{ validateMessage }}</p>
</div>
</div>
</template>

<script>
export default {
name: "EFormItem",
props: {
label: { type: String, default: '' },
prop: { type: String, default: '' }
},
data() {
return {
validateState: '',
validateMessage: ''
}
},
}
</script>

<style scoped>
.error {
color: red;
}
</style>

和上面一样,我们接着对上面的代码进行一些解释:

**解释一:**根据 ElementUI 中的用法,我们知道

label
是父组件传来,且当传入时我们展示,不传入时不展示。

解释二:

slot
是一个预留的槽位,我们可以在其中放入
input
或其他组件、元素。

解释三:

p
标签是用来展示错误信息的,如果验证状态为
error
时,就显示。

此时,我们的

FormItem
组件也可以使用了。同样,我们在 App.vue 中引入该组件。


<template>
<div id="app">

<e-form-item label="用户名" prop="name">
<e-input v-model="ruleForm.name"></e-input>
</e-form-item>

<e-form-item label="密码" prop="pwd">