TDesign----表格组件reserveSelectedRowOnPaginate

本文介绍了在使用腾讯TDesignUI库时遇到的reserveSelectedRowOnPaginateAPI问题,如何设置以控制全选行为,以及解决全选按钮禁用和跨页选择的技巧。作者还提供了扩展功能,实现在页面切换时保持选中内容的状态。

最近在用一个使用人数比较少的UI库,就是腾讯出的TDesign。像这种使用人数少的UI库,有个最大的烦点就是,有啥问题百度都百度不到。因为用的人少。

今天恰巧遇到一个很神奇、很坑的API----reserveSelectedRowOnPaginate。

话不多说,直接进入正题。

1.reserveSelectedRowOnPaginate作用

根据官网描述,表格在全选时,是否跨页全选。

2.reserveSelectedRowOnPaginate怎么使用?

如果您不想全选的时候选中所有页的内容,只想选中当前页,那么只需要把reserve-selected-row-on-paginate设置为false就可以了。如果您想全选的时候选中所有页的内容,那就没必要往下看了,直接不加这个属性就可以了。

 <t-table
          v-model:selected-row-keys="tableData.selected"
          row-key="_id"
          :data="newTableData"
          :columns="tableData.columns"
          :pagination="pagination"
          :reserve-selected-row-on-paginate="false"
          @page-change="onPageChange"
          @select-change="onSelectChange"
        >

          <template #operation="slotProps">

             <--这部分是操作的内容-->

          </template>

        </t-table>

let tableData = reactive({

  columns: [

    {

      colKey: "row-select",

      type: "multiple",

      width: 50,

    },

    {

      colKey: "name1",

      title: "name1",

      width: "30%",

      ellipsis: true,

      // 对齐方式

      align: "center",

    },

    {

      colKey: "name2",

      title: "name2",

      width: "30%",

      ellipsis: true,

      align: "center",

    },

    {

      colKey: "operation",

      title: "操作",

      width: "10%",

      cell: "operation",

      fixed: "right",

      align: "center",

    },

  ],

  data: [],//表格数据,从后端获得

  selected: [],//当前被选中表格内容的id

});

3.坑在哪儿?

你会发现加了:reserve-selected-row-on-paginate="false"之后,会出现全选按钮被禁用,那么经过我反反复复的测试,发现只要在pagination对象加上pageSize:10就可以了。当然,不一定10,也可以是其他的数字。因为我的页面需求是没有选择每页显示多少条数据的下拉框,所以最开始的时候就没有加pageSize这个属性。

然后需要检查表格的数据如果有_id,那么第2步的row-key="_id",这个就要跟表格数据进行匹配,因为选中表格内容最后是那的它的_id,可以进行批量删除什么的。如果你的表格数据是index,那么row-key="index",总之要与你的表格数据进行匹配。

然后,你可能会发现,哎??还是不行,反正就是达不到想要的效果。那么,你可以重启一下项目,说不定好了。

const pagination = reactive({

  current: 1,

  showPageSize: false,

  pageSize:10,

  total: 0,

});

4.拓展----切换其他页,保存当前选中的数据

官方给的这个API只能满足,全选当前页的内容,切换页码之后,再回到之前全选的页码,就没有刚才选中的内容了。那么想要实现,随意切换页码,但是之前选中的内容一直被选中怎么办呢?请参考下面的代码:

const selectedData=reactive({});//用来保存所有被选中的表格内容。这里用的是对象的形式,{页码:[选中id]}

const is_changePage=ref(false);//用来监听是否页码被切换

const onSelectChange = (selectedRowKeys, context) => {

  if(is_changePage.value){

    tableData.selected=selectedData[pagination.current] || [];

    is_changePage.value=false;

  }else{

    selectedData[pagination.current]=selectedRowKeys;

  }

};

const onPageChange = (pageInfo, context) => {

  pagination.current = pageInfo.current;

  is_changePage.value=true;

};

关于TDesign,还有其他的坑或问题,之后我会继续写,如果有小伙伴也用这个组件库的话,不妨一起讨论问题。

`tdesign-vue-next-chat` 是基于 TDesign(腾讯企业级设计体系)构建的 Vue Next 版本组件库中的一个与聊天界面相关的组件。它主要用于构建现代化的聊天或消息交互界面,适用于 Web 端的企业级应用开发。以下是关于 `tdesign-vue-next-chat` 的使用文档、示例和问题排查方面的信息: ### 使用文档 `tdesign-vue-next-chat` 的官方文档通常包含组件的基本用法、API 参数说明、插槽定义、样式定制等。以下是一个基本的使用指南: #### 安装 确保已安装 `tdesign-vue-next` 组件库: ```bash npm install tdesign-vue-next ``` #### 引入组件 在 Vue 文件中引入 `Chat` 组件: ```vue <script setup> import { Chat } from 'tdesign-vue-next'; </script> ``` #### 基本用法 ```vue <template> <t-chat :messages="messages" :user="user" @send="onSendMessage" /> </template> <script setup> import { ref } from 'vue'; const messages = ref([ { sender: 'user1', content: '你好!', time: '10:00' }, { sender: 'user2', content: '你好!有什么可以帮助你的吗?', time: '10:01' }, ]); const user = ref({ id: 'user1', name: '张三', }); const onSendMessage = (message) => { messages.value.push(message); }; </script> ``` #### API 参数说明 | 参数名 | 类型 | 默认值 | 描述 | | ----------- | -------- | ------ | ---- | | `messages` | `Array` | `[]` | 聊天消息列表 | | `user` | `Object` | `{}` | 当前用户信息 | | `@send` | `Event` | - | 发送消息时触发的事件 | ### 示例 以下是一个完整的聊天界面示例,展示如何使用 `tdesign-vue-next-chat` 组件实现一个简单的聊天应用: ```vue <template> <div style="width: 600px; height: 400px;"> <t-chat :messages="messages" :user="user" @send="onSendMessage" /> </div> </template> <script setup> import { ref } from 'vue'; const messages = ref([ { sender: 'bot', content: '欢迎使用 TDesign Chat 组件!', time: '10:00' }, ]); const user = ref({ id: 'user', name: '用户', }); const onSendMessage = (message) => { messages.value.push(message); }; </script> ``` ### 问题排查 在使用 `tdesign-vue-next-chat` 时,可能会遇到一些常见问题。以下是一些排查建议: - **组件未正确引入**:确保在使用组件前已正确引入 `Chat` 组件- **样式未加载**:检查是否已正确加载 TDesign 样式文件,通常需要在入口文件中导入样式: ```javascript import 'tdesign-vue-next/es/style/index.css'; ``` - **数据格式不正确**:确保 `messages` 数据格式符合组件要求,每个消息对象应包含 `sender`, `content`, 和 `time` 字段。 - **事件未绑定**:检查 `@send` 事件是否正确绑定,确保发送消息时能触发相应逻辑。 - **版本不兼容**:确认使用的 `tdesign-vue-next` 版本是否支持 `Chat` 组件,必要时升级到最新版本。 ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值