element-ui 组件库 el-form 实现
如果使用过 element-ui 组件库的人都知道,Form 表单由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。用法如下:
<template><el-form :model="form" :rules="rules" ref="form"><el-form-item label="用户名" prop="username"><el-input v-model="form.username"></el-input></el-form-item><el-form-item label="密码" prop="password"><el-input v-model="form.password"></el-input></el-form-item><el-form-item><button @click="validate">确认提交</button></el-form-item></el-form>
</template>
<script>
import Form from "./components/ElForm.vue";
import FormItem from "./components/ElFormItem.vue";
import Input from "./components/ElInput.vue";
export default {components: {"el-form": Form,"el-form-item": FormItem,"el-input": Input,},data() {return {form: {username: "",password: "",},rules: {username: [{ required: true, message: "请输入用户名" }],password: [{ required: true, message: "请输入密码" }],},};},methods: {validate() {// form组件中校验是通过this.$refs.form.validate((valid) => {if (valid) {alert("校验通过");} else {alert("校验不通过");}});},},
};
</script>
今天讲解 el-form,el-form-item,el-input 的基本实现原理。掌握 el-form 组件的设计思想。
你将学会组件之间的数据通信,eventBus、children、provide。
el-form 组件
<template><form onsubmit="return false"><slot></slot></form>
</template>
<script>
export default {provide() {return {form: this,};},props: {model: {type: Object,},rules: {type: Object,},},methods: {// 在form组件中检查所有的formItem是否全部通过校验validate(cb) {cb(this.$children.every((child) => child.validateStatus !== "error"));},},
};
</script>
el-form-item 组件
<template><div><label v-if="label">{{ label }}</label><slot></slot><!-- 有错误 显示错误提示信息 --><div v-if="validateStatus === 'error'">{{ validateContent }}</div></div>
</template>
<script>
import Vue from "vue";
Vue.prototype.$bus = new Vue();
export default {props: {label: String,prop: String,},inject: ["form"], // 注入父级的实例data() {return {validateStatus: "", // 当前表单是否通过校验validateContent: "", // 当前校验后的信息};},methods: {validate(value) {let rules = this.form.rules[this.prop]; // 获取当前对应的规则rules.forEach((rule) => {// 如果必填 并且没有值,那就出错if (rule.required && !value) {this.validateStatus = "error";this.validateContent = rule.message;} else {this.validateStatus = "";this.validateContent = "";}});},},mounted() {this.$bus.$on("input", (data) => {if (this._uid === data.id) {// 说明更改的是当前自己的输入框this.validate(data.value);}});},
};
</script>
el-input 组件
<template><input type="text" :value="inputValue" @input="handleInput" />
</template>
<script>
export default {props: {value: String,},data() {return { inputValue: this.value };},methods: {handleInput(e) {// 更新数据this.inputValue = e.target.value;this.$bus.$emit("input", {id: this.$parent && this.$parent._uid, // 为了标识是哪个输入框value: this.inputValue,}); // 发射输入事件},},
};
</script>
表单校验这里也只是简单的判断,但是 Element 官网使用的是第三方的 npm 包。更多高级用法可参考 async-validator。
上面演示的代码是 vue2 版本,vue3 已经不在提供 eventBus 了,没有 $on 这个 API 了,推荐使用第三方的 npm 包 mitt 编写,源码也是这样的。
element-ui 组件库 el-form 实现相关推荐
- Element UI 组件库分析和二次开发(一)
我的本地开发环境:M1 芯片Mac,node v12.22.10. 一.Element UI 组件库二次开发的大致流程 1. 从 Element 官方 clone 一份 dev 源码到本地 2. 安装 ...
- Element ui 组件库 使用技巧。
按需引入 babel文件 配置. 配置 babel.config.js文件 可以创建 一个js 特意来存放我们需要的 element 组件. 在main.js 文件中 全局引入 上面存放 组件的 js ...
- 16款优秀的Vue UI组件库推荐
16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用 ...
- vant引入组件报错_强烈推荐优秀的Vue UI组件库
在我们实际开发中常常因为项目周期短不得不引入一些UI框架来辅助开发 那常见的比较好的UI框架有那些呢(基于VUE) Element UI组件库 (pc端) Element,一套为开发者.设计师和产品经 ...
- 17款优秀的Vue UI组件库汇总
17款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用 ...
- 2022-04-05 学习记录--React-React UI组件库-ant-design(蚂蚁金服)—— 按需引入样式 + 自定义主题
一.流行的开源React UI组件库 流行的开源React UI组件库 material-ui(国外) 1.官网:http://www.material-ui.com/#/ 2.github:http ...
- Vue UI组件库总结推荐
基于Vue的Quasar Framework 介绍 这个框架UI组件很全面,准备下次使用这个框架了 基于Vue的Quasar Framework 中文网 http://www.quasarchs.co ...
- 优秀的Vue UI组件库
Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...
- 你知道这些吗?8款优秀的Vue UI组件库推荐,都能打开呦
Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入 ...
- Vue UI组件库(Element UI库)
1 移动端常用 UI 组件库 1. Vant Vant 4 - 轻量.可定制的移动端组件库 (vant-ui.github.io) 2. Cube UI cube-ui Document (didi ...
最新文章
- 机器学习系列22:异常检测
- 任正非:进军高端市场的同时,华为要防范未来竞争者从低端崛起
- css clearfix(针对火狐height:auto无效解决方案)
- JS怎样捕获浏览器关闭时间弹出自定义对话框
- airflow使用_使用AirFlow,SAS Viya和Docker像Pro一样自动化ML模型
- P1963 [NOI2009]变换序列
- python2和3_python2和python3的区别
- 2020年边缘计算最新前沿报告:如何与核心云、5G、AI协同?如何打造新业态和部署运营?...
- Android学习笔记(一)——控件布局常用属性
- Netty工作笔记0064---WebSocket长连接开发3
- CMOS checksum error-Defaults loaded 故障解决办法
- CF 559B Equivalent Strings 分治05 A题
- matlab tic和toc单位,matlab toc tic 的用法
- Make sure ‘SystemCfg‘ is registered using qRegisterMetaType
- OneHotEncoder简单用法
- Spark ML 构建回归模型
- php strpos注意问题坑,strpos函数的坑
- 不是maf格式的somatic突变数据就没办法读入到maftools了么
- oracle权限with admin option和with grant option的用法
- 计算机在小学教育教学中的优劣,计算机在小学教学中的应用探析
热门文章
- Docker、CentOS 8遭弃用,GPT-3、M1芯片撼动技术圈,盘点2020影响开发者的十大事件!
- 如何让 AI 产生意识?
- 大场面试必问:秒杀90%Java面试者,后悔没有早点知道!
- 何时不应该使用 Rails?
- 用 C++ 跟你聊聊“桥接模式” | 原力计划
- 如何让 PPT 像 PyeCharts 一样炫酷?
- 入选 CVPR 2020的旷视论文,到底写了啥?
- 绝了!RNN 还会写藏头诗!
- GitHub 标星 11000+,阿里开源的微服务组件如何连续 10 年扛住双十一大促?
- 近十年数据库流行趋势纵览!存储计算分离、ACID 全面回归......