• element组件踩坑记录


    1. el-table在做多选时,需要记录已经选择的项,但是每次关闭后,上次选中的项就没有了:

    解决方法:可以给el-table绑定row-key属性,用来优化 Table 的渲染;type="selection"列绑定:reserve-selection="true",在数据更新之后保留之前选中的数据。

    1. ref="multipleTable"
    2. :data="labelList"
    3. border
    4. style="width: 100%"
    5. row-key="labelStockId"
    6. >
    7. <el-table-column
    8. type="selection"
    9. width="55"
    10. align="center"
    11. :reserve-selection="true"
    12. >el-table-column>

    row-key属性的值为data数据里的唯一值,也可以是函数 :row-key = "getRowKey"

    1. getRowKey(row) {
    2. return row.labelStockId;
    3. }

    2. 上面这种方法在只能记录一次表格的选中情况,如果涉及到多个地方使用了上述相同的表格组件,而每个表格的选中情况不相同,则上述方法不再适合:

    解决方法:在获取表格数据的时候,使用组件提供的 toggleRowSelection 方法,切换某一行的选中状态,进行多选框的回显,此方法也可实现切换分页时的回显,需要注意的是 使用  toggleRowSelection 方法 必须使用绑定table的原有数据,不可使用传入的参数,否则方法会无效

    1. outstockLablestock(param).then((res) => {
    2. if (res.data.code === 10000) {
    3. this.labelList = (res && res.data && res.data.data.records) || [];
    4. this.total = res.data.data.total;
    5. // 已选中项回显
    6. this.$nextTick(() => {
    7. const selectList = this.labelList.filter(({ labelId }) => {
    8. return this.optionLabelList.some(
    9. (val) => labelId === val.labelId
    10. );
    11. });
    12. selectList.forEach((item) => {
    13. this.$refs.multipleTable.toggleRowSelection(item, true);
    14. });
    15. });
    16. }
    17. });

    3. 表格数据改变,但页面数据不更新,使用 this.$forceUpdate() 也不管用:

    解决方法:给 el-table 绑定 key 值,在需要更新时  this.num++,触发 el-table 的重新渲染

    1. :data="outstockTableData"
    2. border
    3. style="width: 100%"
    4. :key="num"
    5. >

    4.如何不走接口,实现el-table 的分页效果:

    解决方法:使用 slice 方法对当前页要展示的数据进行截取

    1. ref="multipleTable"
    2. :data="
    3. labelList.slice(
    4. (optionPage - 1) * optionSize,
    5. optionPage * optionSize
    6. )
    7. "
    8. border
    9. style="width: 100%"
    10. >
    11. <el-pagination
    12. :current-page="optionPage"
    13. :page-size="optionSize"
    14. layout="total, sizes, prev, pager, next"
    15. :total="optionTotal"
    16. :pager-count="5"
    17. />

    5.在布局时,如果给每一列都加了固定的宽,而table的宽度为100%,会出现多余的线条影响页面效果:

    解决方法:给 el-tale 加上一个width,使它的宽度为所有列宽的和

    1. .el-table {
    2. width: 302px !important;
    3. }
    4. //多的2px为滚动条宽度

    6.如何实现双击table单元格,复制单元格内容

    安装复制插件 clipboard-polyfill

    npm i clipboard-polyfill
    1. import { writeText } from "clipboard-polyfill/text" // 复制
    2. :data="fileListData"
    3. border
    4. style="width: 100%"
    5. @cell-dblclick="cellDblclick"
    6. >
    7. /* 当某个单元格被双击击时会触发该事件(复制内容) */
    8. cellDblclick(row, column) {
    9. console.log(row, column);
    10. let prop = column.property
    11. if (!prop) {
    12. return
    13. }
    14. let content = row[prop]
    15. if ([undefined, null, ''].includes(content) || typeof(content) === 'object') {
    16. return
    17. }
    18. writeText(content) // 复制
    19. Message.closeAll()
    20. Message.success(`复制成功:${content}`)
    21. },

    7.如何实现tabel表格的单选

    1. :data="fileListData"
    2. ref="multipleTable"
    3. @selection-change="handleSelectionChange"
    4. >
    5. let selectRowObj = reactive({
    6. list:[]
    7. })
    8. const handleSelectionChange = (rows) => {
    9. if (rows.length > 1) {
    10. multipleTable.value.clearSelection();
    11. multipleTable.value.toggleRowSelection(rows.pop());
    12. } else {
    13. selectRowObj.list = rows.pop();
    14. }
    15. };

    8.设置树形结构table只可展开一级,其他闭合

    1. :data="tableData"
    2. row-key="id"
    3. :tree-props="treeProps"
    4. :data="fileListData"
    5. :expand-row-keys="expands"
    6. @expand-change="toggleRowExpansion"
    7. >
    8. let treeProps = {
    9. hasChildren: "hasChildren",
    10. children: "children"
    11. };
    12. const expands = ref([])
    13. const toggleRowExpansion = (row, expandedRows) => {
    14. console.log(row, expandedRows);
    15. // 点击先清空数组 全部合起来
    16. expands.value = []
    17. // 点击之前 expandedRows 分为 true / false
    18. if (expandedRows) {
    19. // ture 代表展开 false代表闭合
    20. // 找到父节点一起放进数组
    21. expands.value.push(String(row.id))
    22. expands.value.push(String(row.parent_id))
    23. } else {
    24. // false 代表要合起来,
    25. //如果是根节点,根节点的pid不在列表所以无效,就算放进数组也没用
    26. // 如果是叶子节点 把pid 放进数组 代表只合起自己,当前节点的根节点还是会展开
    27. expands.value.push(String(row.parent_id))
    28. }
    29. }

    9.如果组件多层嵌套的话(类似递归),子级往父级抛事件或者父级给子级传值时,一定要给每一个嵌套子组件绑定事件和传值变量,否则子级接收不到值或者父级接收不到方法

  • 相关阅读:
    微服务面试必读:拆分、事务、设计的综合解析与实践指南
    农村城镇面板数据集:地级市人均消费与支出2012-2019&各省农村数据2013-2019
    docker-compose部署三主三从redis集群
    网络安全(黑客)工具篇
    酷克数据亮相第13届PostgreSQL中国技术大会,获数据库杰出贡献奖
    Starknet的去中心化路线图
    Shell编程从看懂到看开②(字符串、数组、注释、流程控制、read读取控制台输入)
    找准边界,吃定安全 | 云化下的新边界,东西南北流量该如何防护?
    数据结构 ----- 堆排序
    RK3588移植-ffmpeg交叉编译
  • 原文地址:https://blog.csdn.net/wxiao_xiao_miao/article/details/126913977