vxe-table复选框翻页选中问题

根据vxe-table官方文档,想要保留勾选中的数据,我们的代码中需要设置“row-id”和:checkbox-config中的“reserve”属性。

简单写下html部分:

<vxe-grid
	row-id="id"
	:checkbox-config="{ labelField: '', highlight: true, trigger: 'row', reserve: true , range: true}"
	@checkbox-all="selectAllEvent"
    @checkbox-change="selectChangeEvent"
>
	<!--自定义表格内容-->
</vxe-grid>

因为项目都用到vxe-table,所有这里使用vue的混入应用的项目的所有页面表格中,在混入文件中写复选框的事件:

//定义数据,简单模拟
data() {
	return {
		/*table选中keys*/
		selectedRowKeys: [],
		/*table选中records*/
		selectionRows : [],
	}
}
//复选框事件(保留翻页选中的数据)
selectChangeEvent({ checked, records, reserves, row }) {
     // console.log(checked ? '勾选事件' : '取消事件')
     // console.log('当前选中的数据:'   records)
     // console.log('翻页时其他页的数据:'   reserves)
     // console.log('当前选中的数据行:'   row )
     //勾选选中时
     if (checked) {
     	//第一次选数据,还未进行翻页时
         if (reserves.length == 0){
             this.selectedRowKeys = records.map(v => v.id);
             this.selectionRows = records;
         }else {
             //id集合,翻页存在已选中的数据时,拼接新选中的数据
             this.selectedRowKeys = [...reserves.map(v => v.id),...records.map(v => v.id)];
             //数据集合,翻页存在已选中的数据时,拼接新选中的数据
             this.selectionRows = [...reserves,...records];
         }
     }else {
         //取消选中时
         let idIndex = this.selectedRowKeys.indexOf(row.id);
         if (idIndex > -1) {
             //删除取消选中删除指定元素id
             this.$delete(this.selectedRowKeys, idIndex);
         }
         
         let dataIndex = null;
         for(let i = 0; i < this.selectionRows.length; i  ) {
             if (this.selectionRows[i].id == row.id) {
                 dataIndex = i;
                 break;
             }
         }
         //删除取消选中的元素整个对象
         this.$delete(this.selectionRows, dataIndex);
     }
 },
 //vxe复选框当前页全选中方法(保留翻页选中的数据):
 selectAllEvent({ checked, records, reserves}) {
     // console.log(checked ? '勾选事件' : '取消事件')
     // console.log('当前选中的数据:'   records)
     // console.log('翻页时其他页的数据:'   reserves)
     //全选中时
     if (checked) {
     	 //第一次选数据,还未进行翻页时
         if (reserves.length == 0){
             this.selectedRowKeys = records.map(v => v.id);
             this.selectionRows = records;
         }else {
             //id集合,翻页存在已选中的数据时,拼接新选中的数据
             this.selectedRowKeys = [...reserves.map(v => v.id),...records.map(v => v.id)];
             //数据集合,翻页存在已选中的数据时,拼接新选中的数据
             this.selectionRows = [...reserves,...records];
         }
     }else {
         //取消全选时,直接将翻页数据赋值,当前页数据不用加上
         this.selectionRows = reserves;
         this.selectedRowKeys = reserves.map(v => v.id)
     }
 }

上面就实现了vxe-table表格复选框选中和全选中事件,在进行翻页选其他页的数据时,还能保留前面选中的数据的功能。

vxe-table使用技巧总结

最近项目中需要用到多层树table checkbox勾选功能,选了一些组件,最终决定使用vxe-table。

Vxe-table功能丰富、api也多。官方例子很多比较粗浅,我花了很多精力才弄通了一些功能点及细节。在此汇总给大伙铺铺路。官网:vxe-table v4,安装配置和一般组件库差不多,就不细说了。由于项目用的是vue2,所以vxe-table用的是v3版本。

1、树形结构配置

官方配置的树是一个数组,需要在tree-config对象里设置transform为true,这样才会自动把数组转换为需要的树结构。

如果已经有一个具有树形结构的表数据,则应该设置transform为false。如下图所示:

2、获取全局table对象

this.$refs[vxe-table标签上的ref属性值]

官方文档中的table方法api都可以通过该对象调用,如

this.$refs['Tree'   this.activeName][0].setCheckboxRow(row,row.checkFlag)
this.$refs['Tree'   this.activeName][0].loadData(this.middleValue)
this.$refs['Tree'   this.activeName][0].remove(firstLoop)

3、使用多选框注意事项

在checkbox-config的checkField可以绑定选中属性字段,勾选状态为true,未勾选和半选状态为false。

组件会自动渲染勾选和未勾选状态,但不会自动渲染半选状态,除非设置checkRowKeys,但这种方式只会在初始化时被触发一次,动态刷新时没有相应api触发。

期间还试了很多方式都无法完美解决该问题,最后是采用slot模板插槽搞定的,我将在第七点详细介绍。

4、编辑行或单元格注意事项

设置edit-config的mode为cell时是开启单元格编辑模式,为row时是开启行编辑模式;设置edit-config的activeMethod来决定该单元格是否允许编辑(该方法的返回值为true或false),如下图所示,它的意思是只要表格行有childes属性且该属性不为空就不能点击;edit-closed只对 edit-config 配置时有效,单元格编辑状态下被关闭时会触发该事件,可以通过该事件实现实时保存编辑功能。

  

想要编辑的列插槽主要有三个属性配置:

1、field:列字段名,这里需要的是直接可以取到的字段;2、edit-render:可编辑渲染器配置项,具体用法可参考官网vxe-table v3:只对 edit-render 启用时有效,自定义可编辑组件模板,可传多个参数,如传row的话,template里的标签可以获取行数据。需要注意的是:field值和模板里的v-model值应该为同一个,才能实现双向绑定,建议提前把想要编辑的字段放到可以直接取到的层级和地方。

5、表尾数据合并问题

配置show-footer为true可以开启表尾,再通过footer-method方法获取表尾的数据,该数据是一个二维数组。这里需要注意一个问题:表尾数据在触发方法获取后只能通过编辑单元格动态改变,通过该方法改变二维数组后是不会更新变化后的值。

6、仅显示已勾选功能讲解

这个功能就是通过loadData方法加载去掉未勾选行列表数据和原始表数据之间切换。全局table对象下有两个字段:data和tableData,前者是动态改变了数据的整个初始化表数据,可以用来还原仅显示已勾选功能,后者是现在加载着的表数据,经过处理后可以用来激活仅显示已勾选功能。这里需要注意的是:vxe-table加载列表数据后会默认自动生成自定义行数据唯一主键字段_X_ROW_KEY,我们可以在数据处理时用上该字段,如下图所示:

7、解决初始数据半选中状态失效问题

我采用插槽方式自定义了checkbox,它的不确定状态(半选)字段indeterminate我绑定了判断是否半选方法:只要节点是未选中状态且有选中状态的儿子节点就是true半选状态,否则为false未选中状态。

由于将checkbox自定义了,vxe-table的checkbox-change失效,所以要重新在vxe-checkbox里面绑定change事件。最简单的方式就是直接通过setCheckboxRow方法把勾选行设置勾选状态,它的好处是会把勾选节点的所有子节点一并设置是否勾选状态。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

关于vxe-table复选框翻页选中问题及解决的更多相关文章

  1. HTML5单选框、复选框、下拉菜单、文本域的实现代码

    这篇文章主要介绍了HTML5单选框、复选框、下拉菜单、文本域的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – ipatool因异常而失败

    我正在导出企业部署的存档,我从ipatool获得了一个例外.我该如何解决这个问题?

  3. xcode4 – 重新启用XCode 4“Xcode启动时显示此屏幕”复选框.

    我设法取消选中Xcode4’显示这个屏幕,当Xcode启动’复选框,我想要它再次.这是如何实现的?除了“启动新项目”之外,Xcode4文档中还没有提到用户prefs中的任何内容.此外,Google上的任何地方似乎都没有任何问题.如果有人知道重新启用复选框的位置,请告诉我.再次感谢.V.V.解决方法选择窗口>欢迎使用主菜单中的Xcode,然后重新检查“显示此窗口…”

  4. 应用商店 – 自定义B2B应用的复选框未在iTunes连接中显示

    我想将一个应用程序作为自定义b2b应用程序带给AppleStore.唯一的问题是我的iTunes连接没有选项.这个B2B计划在德国不可用吗?我找不到任何具体的信息.也许你们中的一个有同样的问题.解决方法我有同样的问题,复选框不在那里.确保在iTunesConnect内您已经同意在“合同,税务和银行”下的相关合同.一旦你要求并同意这些,复选框应该出现.

  5. Swift - 让StoryBoard设计视图,程序运行时都使用横屏形式

    1,运行时横屏将项目属性“General”->“DeviceOritentation”的Portrait复选框去掉2,storyboard设计视图横屏在storyboard中,单击中间界面视图的头部,在右侧属性面板中。把Size设置为iPhone4-inch把Orientation设置成Landscape

  6. 如何在swift(iOS)中创建单选按钮和复选框?

    我正在开发一个允许进行调查的应用程序。我的布局是从基于XML的问题生成的。我需要创建单选按钮(单选)和复选框。我没有发现任何有用的swift。有没有人有想法?对于无线电按钮和复选框,没有内置的东西。您可以轻松实施复选框。您可以为UIControlStatenormal的按钮设置一个uncheckedImage,并为您的UIControlStateSelected设置一个checkedImage。现在点击按钮将更改其图像,并在选中和未检查的图像之间交替显示。要使用单选按钮,您必须为您要作为单选按钮的所有按钮

  7. swift – 在Xcode 6.0.1中的Interface Builder中,“限制边缘”是什么意思

    我理解“间距到最近邻”的目的,但是“限制边缘”是什么意思?在特定控件按钮的边缘“间距到最近邻”之间有一个链接,同时检查名为“限制边缘”的复选框吗?Autolayout中此功能的作用是什么?

  8. android – 带复选框的ListView项目 – 如何删除复选框涟漪效应?

    我有一个带有项目的ListView包含一个复选框和一些其他元素.问题是,当我点击Android5设备上的列表项时,我看起来像这样:我不希望在复选框周围产生涟漪效应.我怎么能实现这一点?

  9. Android复选框可见性问题

    我在我的代码中使用了一个复选框,当它检查时它会使textview和editText可见,但如果我取消选中de复选框,它们将继续显示而不是消失.这是代码:并且在相对布局内部的xml的一部分:当我取消选中复选框时,我该怎么做才能使textView和EditText消失?解决方法使用View.VISIBLE,View.INVISIBLE,View.GONE来控制可见性.

  10. android – 自定义列表单击复选框

    另外,如果单击列表项的主要部分但是在选中项目中的CheckBox时具有其他功能,如何设置列表以便继续执行我所需的功能?解决方法如here所述,只有在没有其他视图可聚焦的情况下,单击侦听器才有效.将CheckBox设置为focusable=“false”应该可以解决问题:

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部