当前位置: 首页 > news >正文

电子商务网站实例帝国做双语网站

电子商务网站实例,帝国做双语网站,怎么把自己做的网站放到百度上,可以做行程的网站el-table一键全选,分页的完美支持 问题背景尝试解决存在问题问题分析 解决方案改进思路如下具体代码实现如下 问题背景 现在有个需求,一个表格有若干条数据(假设数量大于20,每页10条,保证有2个以上分页即可)。 现在需要在表格上方…

el-table一键全选,分页的完美支持

  • 问题背景
      • 尝试解决
      • 存在问题
      • 问题分析
  • 解决方案
      • 改进思路如下
      • 具体代码实现如下

问题背景

现在有个需求,一个表格有若干条数据(假设数量大于20,每页10条,保证有2个以上分页即可)。
现在需要在表格上方加个全部选择的按钮,点击全部选择按钮时,可以把表格的复选框全部勾选,切换分页后依然是勾选状态,那么怎么实现呢?示意图如下:在这里插入图片描述

尝试解决

我们平时做表格的勾选时,一般都用selection-change方法。
假设我们有个接口getAllTableIds返回数据的全部id,那么我们尝试以下方法来实现上述需求:

<el-button type="primary" plain size="mini" @click="handleSelectAll">全部选中</el-button>
<el-tableref="tableRef":data="tableData"@selection-change="handleSelectionChange":row-key="row => row.id"
><el-table-column type="selection" reserve-selection label="序号" /><el-table-column label="编号" prop="code" />
</el-table>
export default {methods: {/** 多选框选中操作 */handleSelectionChange(selection) {this.ids = selection.map((item) => item.id);},// 全部选中handleSelectAll() {getAllTableIds().then(res => {this.ids = res.datathis.setSelectedCheckbox()})},// 设置按勾选框选中setSelectedCheckbox() {this.$nextTick(() => {if (this.ids.length > 0) {this.tableData.forEach((item) => {if ( this.ids.includes(item.id) ) {this.$refs.tableRef.toggleRowSelection(item, true);}});}})},}
}

存在问题

你这样写了之后,感觉还不错,点击全部选中按钮,也确实全都勾选了,就像上图一样,但是当你切换到第二页时,你就傻眼了,咋没勾选上呢?在这里插入图片描述

问题分析

上面我们的思路主要分为以下几个步骤:

  • 点击按钮,从接口处获取全部id列表,并保存到ids数组变量
  • 遍历当前页的数据,如果ids中存在该id,那么就把当前行设置为勾选状态
  • 切换分页时也调用setSelectedCheckbox方法
  • 傻眼了
    其实,逻辑都没有错,错的是没用对方法,就是上面提到的selection-change方法,如果你对该方法的函数handleSelectionChange打印一下,你会发现该方法执行了10次(因为每页10条数据)
    因为你在循环中执行勾选:
    this.$refs.tableRef.toggleRowSelection(item, true);
    
    就不断地触发handleSelectionChange方法,这也导致上面给ids赋值全部id的集合,也会变为当前页的集合,也就导致当你切换分页时,第二页不会勾选的原因。
    在这里插入图片描述

解决方案

el-table文档中还有这两种方法
在这里插入图片描述
既然循环勾选的时候会触发selection-change的方法,那么我们不用这个方法不就好了吗。
监听表格变化,可以用selectselect-all两种方法的结合;因为勾选状态无非就是勾选单行勾选当前页两种嘛!

改进思路如下

  • 点击按钮,从接口处获取全部id列表,并保存到ids数组变量
  • 遍历当前页的数据,如果ids中存在该id,那么就把当前行设置为勾选状态
  • 切换分页时也调用setSelectedCheckbox方法
  • 单行勾选变化
    • 选中:把该行id值push进ids数组,并去重(防止以外情况)
    • 取消勾选:把该行id值从ids数组中去除
  • 当前页勾选变化
    • 选中:把当前页的id值push进ids数组,并去重(防止以外情况)
    • 取消勾选:把当前页的id值从ids数组中去除

这样就不会影响ids的值了!

具体代码实现如下

<el-button type="primary" plain size="mini" @click="handleSelectAll">全部选中</el-button>
<el-tableref="tableRef":data="tableData"@select="handleSelectRow"@select-all="handleSelectAllRow":row-key="row => row.id"
><el-table-column type="selection" reserve-selection label="序号" /><el-table-column label="编号" prop="code" />
</el-table>
export default {methods: {/** 多选框选中操作 */handleSelectionChange(selection) {this.ids = selection.map((item) => item.id);},// 选择某行handleSelectRow(selection, row) {const id = row.idif(this.ids.includes(id)) {this.ids = this.ids.filter(item => item !== id)} else {this.ids.push(id)}},// 选择当前页handleSelectAllRow(selection) {// 如果全部勾选if(selection.length > 0) {const ids = selection.map((item) => item.id);this.ids = Array.from(new Set([...this.ids,...ids]))} else {// 如果当前页取消勾选const ids = this.tableData.map((item) => item.id);this.ids = this.ids.filter(item => !ids.includes(item))}},// 设置按勾选框选中setSelectedCheckbox() {this.$nextTick(() => {if (this.ids.length > 0) {this.tableData.forEach((item) => {if ( this.ids.includes(item.id) ) {this.$refs.tableRef.toggleRowSelection(item, true);}});}})},}
}

这样就能解决一键全选、且分页保留勾选状态的功能了!

别忘了,请求列表接口时也调用setSelectedCheckbox方法

如果有更好的解决办法,可在评论区讨论,谢谢。

http://www.yayakq.cn/news/777479/

相关文章:

  • 网站客户留言朔州企业网站建设公司
  • 建站网站软件8深圳seo优化排名优化
  • 最新网游排行榜2024优化网站排名茂名厂商
  • 网站制作公司深圳wordpress侧栏文本代码
  • 免费制作网络商城网站宝安seo优化公司
  • 哈尔滨网站设计哪里有做文明校园建设专题网站
  • 网站建设参考文献涂料增稠剂移动网站建设公司
  • 网站开发的售后 维保深圳关键词首页排名
  • 青岛外贸网站推广广告网站布局
  • 有的网站打不开是什么原因呢网站模板模板
  • 怎么设置网站的关键字国内成熟的crm系统
  • js特效网站吉林做网站
  • 货代找客户的网站创意设计素材
  • 上海公司详细地址石家庄抖音seo公司
  • 网站内容段落之间有空格对seo有影响吗沈阳做网站的企业
  • 如何建立个人网站的步骤网站tag标签功能实现
  • 任丘网站建设公司网页设计需要学什么科目
  • 有域名了怎么建立网站郑州专业公司网站建设公司
  • seo 新老网站替换 域名不变淘宝优惠券网站怎么做
  • 赣州网站建设费用网站优化需求表
  • 江苏水利建设网站中国做网站的网站
  • 外贸网站 海外推广汽车之家电脑网页版
  • 网站开发 云智互联微盟登录
  • 做肥料网站安卓做网站教程
  • 万博法务网站建设项目建筑网格布的作用
  • 建设美食网站seo运营推广
  • 淮安网站建设报价网站配色方案橙色
  • dede后台网站地图怎么做百度登录入口
  • 昆明企业网站制作哪个网站可以做头像
  • 网站服务器怎么搭建创意家居网站建设与管理