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

网站推广seo设置新吴区推荐做网站价格

网站推广seo设置,新吴区推荐做网站价格,深圳高端家具公司,最新仿5173游戏装备交易网站 /游戏币交易平台源码整合支付接口el-table组件实现分页,多选以及回显 需求思路1、实现分页多选并保存上一页的选择2、记录当前选择的数据3、默认数据的回显 完整代码 需求 使用 dialog 显示 table,同时关闭时销毁el-table 表格多选回显已选择的表格数据,分页来回切换依然正确…

el-table组件实现分页,多选以及回显

    • 需求
    • 思路
      • 1、实现分页多选并保存上一页的选择
      • 2、记录当前选择的数据
      • 3、默认数据的回显
    • 完整代码

需求

  1. 使用 dialog 显示 table,同时关闭时销毁
  2. el-table 表格多选
  3. 回显已选择的表格数据,分页来回切换依然正确显示数据
  4. 点击取消,数据回到初始化勾选状态

思路

1、实现分页多选并保存上一页的选择

分别添加以下属性
Table 属性
在这里插入图片描述
Table-column 属性
在这里插入图片描述

<el-table ref="tableRef" row-key="id" @selection-change="handlechange"><el-table-column type="selection" :reserve-selection="true" align="center" />
</el-table>

2、记录当前选择的数据

定义 el-table 的 selection-change 事件回调函数

const handlechange = (val: any[]) => {selected.value = val
}

前两步已经能满足不需要回显的分页多选功能,但是要实现数据的回显还需要以下处理。

3、默认数据的回显

假设定义两个响应式数组表示默认选择和当前选择

// 默认选中列表
const defaultSelected = ref<any[]>([])
// 当前选中的列表
const selected = ref<any[]>([])
// 通过 selection-change 事件回调保存当前选择的数据
const handlechange = (val: any[]) => {selected.value = val
}

在显示弹窗方法里通过 el-table 中的 toggleRowSelection 方法初始化选中所有默认选项(注意是所有的选项,而不只是当前页的选项),如果只选择当前页的默认选项,selected 将会丢失其他默认选项

// 显示表格弹窗
const showDialog = () => {getTableList()setTimeout(() => {for (const item of defaultSelected.value) tableRef.value.toggleRowSelection(item, true) // 选中默认选中的行}, 0)visible.value = true
}

至此实现了所有功能,总结一下原理就是 el-table 通过 row-key 来判断是否已选择,所以通过 toggleRowSelection 选择所有默认的选项,不管点击哪一页都会正确回显数据,并且定义了 handlechange 会保存新的改变

如果每次确认后不销毁 table 组件,需要调用 clearSelection 方法清空所有已选项

const handleClick = () => {// 保存新的数据defaultSelected.value = cloneDeep(selected.value)selected.value.length = 0pagination.currentPage = 1// 清空表格已选项tableRef.value.clearSelection()visible.value = false
}

完整代码

记录下代码,互相学习提提意见

<script setup lang="tsx">
import { useI18n } from '@/hooks/web/useI18n'
import { getTableListApi } from '@/api/table'
import { TableData } from '@/api/table/types'
import { ref, reactive, watch } from 'vue'
import { ElTableColumn, ElTable, ElPagination, ElButton, ElDialog } from 'element-plus'
import { cloneDeep } from 'lodash-es'const { t } = useI18n()const columns: any[] = [{type: 'selection',width: 60,align: 'center'},{field: 'title',label: t('tableDemo.title')},{field: 'author',label: t('tableDemo.author')},{field: 'display_time',label: t('tableDemo.displayTime'),sortable: true},{field: 'importance',label: t('tableDemo.importance')},{field: 'pageviews',label: t('tableDemo.pageviews')}
]const loading = ref(true)const visible = ref(false)const pagination = reactive({currentPage: 1, // 当前页数pageSize: 10, // 每页显示条数pageSizes: [10, 20, 30, 40, 50], // 每页显示个数选择器的选项设置total: 100 // 总条数
})const tableDataList = ref<TableData[]>([])const tableRef = ref<any>()// 默认选中列表
const defaultSelected = ref<any[]>([])// 当前选中的列表
const selected = ref<any[]>([])const getTableList = async () => {// 分页查询方法const res = await getTableListApi({ ...pagination, pageIndex: pagination.currentPage }).catch(() => {}).finally(() => {loading.value = false})if (res) {tableDataList.value = res.data.list}
}const showDialog = () => {getTableList()setTimeout(() => {for (const item of defaultSelected.value) tableRef.value.toggleRowSelection(item, true) // 选中默认选中的行}, 0)visible.value = true
}const handlechange = (val: any) => {selected.value = val
}const handleClick = () => {defaultSelected.value = cloneDeep(selected.value)selected.value.length = 0pagination.currentPage = 1// 清空选项tableRef.value.clearSelection()visible.value = false
}watch(() => [pagination.currentPage, pagination.pageSize], getTableList, { immediate: true })
</script><template><!-- 控制弹窗显示 --><ElButton type="primary" @click="showDialog">显示</ElButton><!-- 表格弹窗 --><el-dialog title="提示" v-model="visible" width="80%" destroyOnClose><div class="w-full h-800px flex flex-col justify-between"><el-tableref="tableRef"height="760px":data="tableDataList":loading="loading"row-key="id"@selection-change="handlechange"><el-table-columnv-for="column in columns":type="column.type":key="column.field":prop="column.field":label="column.label":reserveSelection="true"/></el-table><div class="flex justify-start"><el-button type="primary" @click="handleClick">确认</el-button></div><!-- 分页器 --><div class="flex justify-end"><el-paginationbackgroundlayout="total, sizes, prev, pager, next, jumper"v-model:current-page="pagination.currentPage"v-model:page-size="pagination.pageSize":total="pagination.total":page-sizes="pagination.pageSizes"/></div></div></el-dialog>
</template>
http://www.yayakq.cn/news/489411/

相关文章:

  • 昆明做网站找天度南京个人网站建设
  • 做网站域名服务器上海的外企公司有哪些
  • 子网站建设经验汇报什么是搜索引擎营销
  • wordpress网站设计作业做网站的标题图片
  • 公司网站是怎么样的装修网店
  • 怎么修改公司网站内容湖滨网站建设
  • 微信官网网站模板下载安装网站安全防护找谁做
  • 网站开发 发送邮件功能宁波制作网站知名
  • 网站群管理网站外链快速建设
  • 网站新闻源码cnu摄影官网
  • 郑州有哪些做网站的公司任丘建设网站
  • 天津企业做网站多少钱潜江资讯网招聘临时工
  • 固安做网站的公司全网营销销售
  • 退役厅门户网站建设中标公告wordpress页脚链接
  • 荣耀手机商城官方网站售后网络维护服务合同模板
  • 同一ip网站公司注册网上怎样注册
  • 怎么维护好网站长沙网站推广公司
  • 国内外贸网站建设跨境电商平台哪家最好
  • 用wordpress建公司网站步骤网站存储空间大小
  • 简繁英3合1企业网站生成管理系统游戏打金工作室加盟
  • 新余哪有做网站的公司海口专注海南网站建设
  • 佛山市企业网站seo联系方式免费入驻的跨境电商平台
  • 想做一个自己设计公司的网站怎么做室内设计效果图片
  • 提升自己网站查备案怎么查询
  • 网站店招用什么软件做的wordpress网银插件下载
  • 网站深圳优化建设去哪个网站做吃播
  • 盘锦威旺做网站建设公司wordpress头像修改
  • 免费网站建设模板下载七七网站建设
  • 给网站开发APP网站自助建设推广
  • 番禺网站建设培训怎么做消费信贷网站