iview,基于iView 的树选择器组件
无论是iview还是基于iView 的树选择器组件,它们都是当前热门话题。如果你对它们感到好奇,那么请跟随小编的脚步,一起来揭开它们的秘密吧!
基于iView 的树选择器组件
产品最近提了一个需要三级选择器才能实现的需求,看了iView和Element-UI,没有找到合适的组件,然后做了一个基于iView的TreeSelect组件。
github地址: https://github.com/FFFFF1/vue-super-tree-select
install安装
npm install vue-super-tree-select--save
Usage示例
该组件是基于iView的,请事先use iView与其CSS;
如果出现下拉框被其他组件遮盖时,请自行修改.content-box的z-index值(默认为100);
import superTreeSelect from'vue-super-tree-select'
export default{
components:{superTreeSelect},
data(){
return{
model_: [
{ title:'豆浆'},
{ title:'油条'}
],
data_: [
{
title:'早餐',
children: [
{
title:'北方',
children: [
{title:'豆浆'},
{title:'油条'}
]
},
{
title:'南方',
children: [
{title:'肠粉'},
{title:'虾饺'}
]
}
]
}
]
}
}
}
config配置项
属性说明类型默认值
pkey设置每一个节点的唯一标识Stringtitle
v-model存放组件中选择的最底层节点信息,每个节点信息会自动加上一个value属性,记录其所有父节点的pkey值类似于:'id1/id2/id3'Array/
data组件中所有的选择项,格式请参照示例Array/
searchable是否可搜索,设置该属性为true时,可以根据子节点的title进行搜索Booleanfalse
clearable是否可清空Booleanfalse
width设置组件的宽度String300
iview内存泄漏
iview在升级到view-design之前,是存在严重的内存泄漏问题的,而如果你在项目中大量使用了iview组件,就可能面临大量的升级工作要做,因为样式很多是不兼容的。
我们今天就看一下iview的源码,看看到底问题在哪里?为什么会导致内存泄漏?
首先进入iview官网 https://iview.github.io/,安装老版iview2.0。
我们看一下常用的table组件吧:
我们可以看到,在beforeDestory周期中,只释放了挂载的resize事件,并未释放this下注册的自定义事件on-visible-change,这就会导致运行一段时间,this下挂载的自定义事件越来越多,从而导致内存的泄漏。
我们再看看升级后的view-design:
我们一定要重视beforeDestroy生命周期的作用,将dom的引用、所有注册的事件都要释放掉,防止内存泄漏的产生。
iview-树形控件的使用(一)
因为需要做一个权限管理,所以用到树形控件。
首先引入组件:
然后是data数据:
数据就会在页面上以树形结构的形式渲染出来:
左边是权限选项,右边是所选权限,如何达到这样的效果和只获取用户所选的权限。
树形控件里提供了三个事件和三个方法,这里用到的是事件是@on-select-change,点击树节点时触发,返回值是当前选中的节点数组,当前项,用到的方法是getCheckedAndIndeterminateNodes(),用于获取选中及半选节点。ref="tree',这个属性一定要写,之后要获取的数据通过$refs.tree.data可获取。
首先是如何在右边显示用户选择的权限,要有层级关系,半选的选中的都要显示。
将用户选择的权限有层级关系的展示出来后,现在要做的是获取用户选择的权限,只需要全选的即可。这里用到的是iview提供的getCheckedAndIndeterminateNodes()方法。this.power里存放的就是用户选择的权限,然后通过按钮保存按钮提交到后台即可
iView爬坑记——表单验证
版本:iView 2.7.4
自从项目用了iView之后,感觉做新需求的一半时间都在疯狂踩坑,所以写个文档记录一下踩过的坑。
此篇为iView表单验证的爬坑记录。
更新:2019.3.10
在项目开发中,表单验证时一直出现各种“不能为空”、验证不通过等情况,但是自身输入和验证方法没有问题时,一般来说是输入框的value为 undefined的。
比较简单的检测方法就是写一个验证方法,打印或 debugger查看此时的输入值的取值( value)是否为输入值,如果不是或为 undefined,那么就是取值错误,而非验证方法错误。
参考文档例子:
解决方法:
虽然我们在官网上会看到类似例子:
但是建议放弃利用这个方法验证输入值的数据类型。
例如,该验证方法的 type类型有 number,但它默认获取输入值为 string,所以会导致 type不符(并非因为输入的值不是数字)。
现在用的版本中还未修复此问题,如果已修复则可忽视该建议
在平时项目中,会遇到需要选择日期,但提交时日期不能为空这一需求,那么应该如何验证?
根据上面第一条打印 value值,发现如果日期没有选择,日期选择器上的 value值为 ["",""](使用的是<DatePicker type="date"></DatePicker>)。
解决方法:
这时候就不能根据长度验证,所以必须循环/遍历判断 value的数组每一项是否为空。
之前表单验证时遇到一个问题,在不同电脑上, TimePicker的最终数据值类型不同(不知道是否因为一个是Mac一个是Windows10)。
搜索了一下度娘,发现也有其他人有类似问题。
问题为:
Mac上 TimePicker最终数据类型为数组,而Win10上 TimePicker最终数据类型为本地时区时间(例如:2017-11-16T05:23:20.000Z)。
解决方法:
表单提交前记得判断 TimePicker最终数据的类型,避免传值给后端时报错。
表单验证规则中, trigger属性填写的是在什么情况下触发该验证,例如 blur或者 change。
但是我们会有某些需求,需要让该输入框在提交的时候才验证,并不需要实时验证,此时就会有把 trigger删掉的做法。
该做法的结果是,一进入有表单的页面时,表单就会进行一次校验。
有时候在项目中会有几个表单的输入框使用同一个校验方法(比如校验数字、身份证之类的),需要根据页面情况显示特定的错误信息提示,但是这个校验方法又是单独一个JS文件。
那么可以在校验规则上添加 message,写上特定的错误信息提示,这样页面上显示的就是特定的错误信息提示。
在规则中有未填或填错,会有正常提示,但是如果全部填写,步骤1却没办法判断成功并进入方法,会直接报错,有可能是写自定义规则的时候,没有写 callback()。
感谢您的阅读!希望本文对解决您关于iview的问题有所帮助。如果您还有其他疑问,欢迎随时向我们提问。