动态表单的设计与实现(基于Vue ElementUI)

beforeRouterEnter :在进入路由之前执行

在xxx信息管理这种业务场景中我认为最常见的作就是对字段的处理(例如查询、编辑等区域的表单、图表的列名、表格的列名),而字段恰恰是最为 '规范的',它有自己的名称、类型

elementui中文_elementui中文网elementui中文_elementui中文网


elementui中文_elementui中文网


用props属性来配置成和后台数据一样的字段。

用对象或者说map这种结构而不用数组是为了可以精准对某个字段进行设置 而数组需要先遍历查找到这个字段再进行设置

名称既可以显示又可以编辑与查询而性别只能编辑与查询但不能显示,useScene是使用场景如果字段不支持这个场景那么字段不予显示(可自行实现禁用场景)

看到这里可能有的朋友会很不解,为什么我要构造一个如此复杂的useScene,直接定义 canUpdate canQuery 这种布尔值变量来指定场景不就行了吗?

实际上需求是非常复杂多变的,场景可以说是无限的甚至是相互交织关联的、我们可能会根据用户的作动态显示字段的显示隐藏,例如提交后显示提交人、提交时间等字段、撤销了就不予显示

我们可以在用户做某些作时来动态设置sceneMap的状态来达到控制表单的显示、隐藏、禁用,当状态越复杂时你就越能感觉到它的威力

有时我们想在任意两个字段之间插入一个非通用的ui组件,我们可以通过具名插槽来实现

这是一个动态表单的简易实现,需要大家结合自身的业例如有的字段可以查询但不能编辑,我们可以引入一个场景的概念就可以轻易解决这个问题务场景去填充各种各样的表单和相关的参数、

Vue ElementUI el-select的option单独修改前两个字样式

在时间控件上添加指定日期格式的属性value-format=“yyyy-MM-dd” 即可 。这个 yyyy-MM-dd 格式可自定义 参照element手册

更改 el-option的样式大家都知道加popper-class 嵌套class样式来更改

......

给input加上css就OK了

以上,

依托 Vue.js 高效的组件化方案,Mint UI 做到了轻量化。即使全部引入,压缩后的文件体积也 ~30kb (JS + CSS) gzip。欢迎各位大佬指点

2020-06-30 关于element-ui中el-date-picker组件时间落后8个小时的问题

默认情况下无论我们有没有使用到某个组件, 在打包的时候都会将elementUI中所有的组件打包到我们的项目中

使用elementUI的时间选择控件ElementUI是饿了么前端团队推出的一款基于Vue的桌面端UI框架el-date-picker后,作为参数上传到后台接收,发现后台时间比前台时间少一天。

例如我们选择的时间是2020-06-03:

但提交到后端我们发现时间变了:

el-date-picker默认返回的是标准时间(GMT)

标准时间(UTC)是东经120°(东八区)的地方时间

同格林威治时间(即标准时间GMT)相8小时

因此,若后端没有帮忙转换,入库时肯定是少一天的,需要自己手动+8小时转换,再提交到后el-button组件的引用方式如下端,这个需要与后端协调好,看是他转换还是你转换。

element-Ui 问题记录(个人笔记)

DWZ 支持用 html 扩展的方式来代替 jascript 代码, 基本可以保证程序员不董 jascript, 也能使用各种页面组件和 ajax 技术. 如果有特定需求也可以扩展 DWZ 做定制化开化.

在我们使用element进行开发的时候,有时会出现一些奇怪的问题,这些问题有可能是框架本身的缺陷,也有可能是我们使用不当,遂将在开发过程中遇到的问题和值得记录下来的东西,做一个,方便以后参考。

在子组件直接点击关闭时会导致报错(单向数据流问题)。解决方法就是在父组件作关闭,并用第三个变量来控制显示与隐藏。并在visible后加.sync。

ElementUI Form表单验证不通过,明明有值, 验证的错误信息不消失。

注意的点:

1、检查是否赋值成功;

2、赋值成功后检查拿到的数据是否与下拉列表数据id相匹配(可能后端先随便写的)

注意:1.v-model绑定的值格式为 [12,23,34] 这种格式,如果不是需要进行处理。2.检查返回id数组与下拉框列表中的数据是否有匹配,如果不匹配则显示不了文字。

[Vue warn]: children must be keyed: 报错

el-header组件,只接受一个height属性,用来添加style设置高度,默认为60px。在 保证绑定的数据类型与后台数据类型一致 的情况下,还出现以上报错,可能有以下原因:

勾选时默认获取到的是不包括半选状态的,所以我们前端传过去之后往往返回的也不包括半选状态的,所以反显的时候不正确。处理方法如下:

解决方案:

1.设置check-strictly

2.拿到接口数据后:

去除单选按钮里的数字,只需添加空格标签 就行了。

解决方法:设置为具体的数值或百分比。( 注如果 v-model 是二级字段,而js中又设置了默认选择项,则点击无反应。:每一个el-form-可以设置单独的label-wodth。)

我们直接绑定一个的时候,默认有一个参数,但是我们想传第二个参数的时候,需要怎么传,以下就是解决方法:

解决办法:

v-model绑定的值改成一级对象。

请求接口数据赋值后,页面上input框正常显示,值也是对的,但是不可编辑。

解决办法:

使用vue的全局api方法,this.$set(data, property, value)

在每次弹出对话框的时候深拷贝一次当前行数据的副本

在一些用户注册场景中,提交整个表单前有时候我们会做一些单独字段的校验,例如发送手机,发送时我们只需要校验手机号码这个字段,可以这样做:

如果需要多个参数,将参数改为数组形式即可。

全局设置

在vue项目中使用elementui之checkbox

至此,404配置成功

elementui对于checkbox的应用也是非常广泛的,checkbox一般都是以的形式出现。

而在elementui中的checkbox绑定的是label的值,但是一般情况下,我们希望绑定的是id。显示的是name.

因为我们的label绑定id的话,在进行增删改查作的时候,我们只需要在你的checkbox-group上面绑定一个 Array。即可获取你所有选中项的i按钮组d。

有一种情况出现了:

只需要这么写就可以了:

你的label绑定id,然后中如果想单独更改el-option的个字话用伪元素:first-letter,仅限中文字间绑定你的name。。

你的脸是不是又方了?

Vue项目 UI框架介绍(第六天上)

其实就是运用选择器,将个按钮右侧圆角,一个按钮左侧圆角,以及中间按钮的全部圆角去掉,即形成了圆角设置,空白线也是类似处理。因为按钮默认都有border,颜色和按钮主体颜色一致,这里只是修改了border的颜色

1.什么是elementUI?

el-button-group就是用来嵌套一组el-button,并且相邻两个按钮内侧的圆角去掉,且有一条空白线相连。具体实现的style如下

2.elementUI使用

3.elementUI优化

这样就导致了我们的项目体积比较大, 用户访问比较慢

4.如何优化

为了解决这个问题, elementUI推出了按需导入, 按需打包. 也就是只会将我们用到的组件打包了我们的项目中

1.什么是MintUI?

MintUI是饿了么前端团队推出的一款基于Vue的移动端U框架

大白话:和Bootstrap一样对原生的HTML标签进行了封装,让我们能够专注于业务逻辑而不是UI界面

2.mintUI使用

3.注意点: MintUI和ElementUI的个不同, 就是在MintUI中需要通过Vueponent来告诉Vue我们需要使用

1.什么是Vant?

在使用MintUI的过程中发现有很多的坑,所以个人不在移动端中选择MintUIXant是有赞前端开发团队又推出的一款 基于Vue的移动端UI框架

大白话:和Bootstrap一样对原生的HTML标签进行了封装,进行了美化,让我们能够专注于业务逻辑而不是UI界面

Vue.use只能use插件,不能use组件

那么如何将一个组件封装成一个插件呢?

1.Vue.use()做了什么事情?

Vue.use的作用是注册一个Vue插件(注册组件), Vue.use必须在new Vue之前使用

2.什么时候需要定义其中,表格的key值都是固定的。但是针对key值不固定的json数据的渲染,文档并未给出明确信息。最近在写项目的时候涉及到的一项需求就是把后台请求到的json数据渲染到页面,但key值并不固定,导致不能按照文档提出的方式进行直接渲染。插件?

当某一个组件或者功能经常需要被使用到时, 我们就可以将这个组件或者功能定义成一个插件

3.如果自定义一个插件?

elementUI源码分析-03-container、button、link

elementUI中的表格增加复选功能并进行数据回显

:外层容器。当子元素中包含 时,全部子元素会垂直上下排列,否则会水平左右排列。

:顶栏容器。

: 侧边栏容器。

:主要区域容器。

:底栏容器。

也就是说, 只能是组合出道, 因为以上采用了flex 布局,也就是说这套组件就是使用了flex布局,是flex布局属性排列组合后的各种布局方式。

el-container这个组件只接受一个参数就是direction,用来描述子元素的排列方向.

默认情况下,如果子元素中有el-header或el-footer时为竖向排列,其余情况下默认横向排列。

源码如下

默认的el-container容器有一个el-container类名,用来设置默认style样式

源码如下

el-header的默认样式

el-aside只接收一个width组件,用来设置侧边栏的宽度,默认是300px

el-aside默认样式

el-main只是一个包括的容器

el-footer与el-hearder类似,只接收一个height属性,用来设置footer的高度。

el-footer的默认样式

el-button实际上就是对原生button的再封装。

el-button的参数列表如下

再结合el-button源码,看一下具体原理

display: inline-block; 表示其为内联元素,可横向排列

white-space: nowrap; 例如: 网络加载指示器表示文本不换行

cursor: pointer; 鼠标滑过显示小手形状

-webkit-appearance: none; 将按钮原始样式去掉

line-height: 1; 行高等于字体大小

type: 通过接受type值,来生成描述背景色等的lass名、比如type=primary, 即el-button--primary,用来设置按钮的背景色,字体颜色、边框颜色。

size : 通过设置size,来生成描述按钮大小的class名,比如size=all, 即el-button--all。

plain : 通过设置plain,用来生成描述对应type下的朴素样式的按钮、

round : 用来描述是否是圆角按钮,来生成对应描述圆角的class名,is-round

circle : 是否是原型按钮,来生成对应50%圆角的class名,is-circle

loading : 是否是加载中按钮,如果是加载中的按钮,则给元素添加el-icon-loading类,添加在加载的图标

icon : 通过设置icon,可以添加的内部提供的图标

autofocus : 用来设置按钮是否聚焦,如果autofocus=true,则给原生button设置autofocus="autofocus"

native-type : 用来设置原生button的type属性,用来描述按钮的类型,即button、reset、submit

inject是跟表单相关的,等后面表单再说吧。

源码如下

文字超链接

参数如下

el-link,其实是对原生a标签的封装。

源码如下

el-link的默认样式如下

type : 通过设置type,添加对应的class类用于布局的容器组件,方便快速搭建页面的基本结构。,给a标签设置对应的字体颜色

underline : 是否有下滑线,如果添加,那么在hover的时候,会添加一个after伪类来创建下划线

href : 即设置原生a标签的href属性

icon : 通过设置icon,可以添加的内部提供的图标

element ui中属性加:的区别

disabled : 是否是禁用状态,如果设置了,会根据对应type,设置对应样式

elementUI是基于vue.js 做的一套前端ui框架,加':'而你的checkbox也有很大的程度是绑定在你的列表里面。例如这样:是vue数据绑定的写法(v-bind的简写),具体的你应该先看看vue的用法。 加‘:’ 表示后面跟随的是表达式,有可能是绑定了变量的,而变量的部分会在js中处理重点就在于m_canUse的实现,它用eval取巧的实现了一个场景逻辑字符串转布尔值的一个骚作。

element-ui 动态表头渲染表格

大白话: 和Bootstrap一样对原生的HTML标签进行了封装, 进行了美化, 让我们能够专注于业务逻辑而不是UI界面

在ElementUI文档中,描述的动态渲染只是单纯的将已知字段名称的JSONel-main的默认样式数据通过prop属性填充到页面中,下为文档内容

这里主要说下,如果单独更改el-option前两个字或者不固定字数的样式

下面实例为如何根据数据数据schema来动态创建表格,其中header和data_list的数据可以通过后台获取,进而实现表格的动态创建