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

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

<e-input v-model="ruleForm.pwd"></e-input>
</e-form-item>

<div>
{{ ruleForm }}
</div>

</div>
</template>

<script>
import EInput from './components/Input.vue';
import EFormItem from './components/FormItem.vue';

export default {
name: "app",
components: {
EInput,
EFormItem
},
data() {
return {
ruleForm: {
name: '',
pwd: '',
},
};
},
};
</script>

 

3. Form 的设计

到现在,我们已经完成了最内部的

input
以及中间层的
FormItem
的设计,现在我们开始设计最外层的
Form
组件。

当层级过多并且组件间需要进行数据传递时,Vue 为我们提供了

provide
inject
API,方便我们跨层级传递数据。

我们举个例子来简单实现一下

provide
inject
。在 App.vue 中,我们提供数据(provide)。


export default {
name: "app",
provide() {
return {
msg: '哥是最外层提供的数据'
}
}
};
</script>

接着,我们在最内层的 Input.vue 中注入数据,观察结果。


<template>
<div>
<!-- 1、绑定 value
2、响应 input 事件-->
<input type="text" :value="valueInInput" @input="handleInput">
<div>{{ msg }}</div>
</div>
</template>

<script>
export default {
name: "EInput",
inject: [ 'msg' ],
props: {
value: {
type: String,
default: '',
}
},
data() {
return {
valueInInput: this.value
};
},
methods: {
handleInput(event) {
this.valueInInput = event.target.value;
this.$emit('input', this.valueInInput);
}
},
};
</script>

根据上图,我们可以看到无论跨越多少层级,

provide
inject
可以非常方便的实现数据的传递。

理解了上面的知识点后,我们可以开始设计

Form
组件了。


<el-form :model="ruleForm" :rules="rules" ref="loginForm">