element-plus 按钮展开/隐藏功能实现

 更新时间:2025年06月27日 12:11:08   作者:焚 城  
本文给大家介绍element-plus 按钮展开/隐藏功能实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

1、小记

element-plus中el-table 的 expand,箭头控制子项显示,有点丑。
想实现类似bootstrap ,用按钮 展开/隐藏子项的功能

2、页面

<!-- 表内容 -->
    <el-table
      :data="tableData"
      :border="true"
      :preserve-expanded-content="true"
      style="width: 100%"
      :expand-row-keys="expands"
      :row-key="getRowKeys"
    >
      <!-- 子项 -->
      <el-table-column type="expand" width="0"><!-- width隐藏列 -->
        <template #default="props">
          <div m="4" class="expandcontent">
            <el-table :data="props.row.family" :border="true" :color="'red'">
              <el-table-column label="Name" prop="name" />
              <el-table-column label="State" prop="state" />
              <el-table-column label="City" prop="city" />
              <el-table-column label="Address" prop="address" />
              <el-table-column label="Zip" prop="zip" />
            </el-table>
          </div>
        </template>
      </el-table-column>
      <!-- 其他数据列 -->
      <el-table-column label="Date" prop="date" />
      <el-table-column label="Name" prop="name" />
      <!-- 操作 -->
      <el-table-column label="Operations">
        <template #default="props">
          <el-button type="primary" @click="toggleExpand(props.row)">
            {{ isExpanded(props.row) ? '收起' : '展开' }}
          </el-button>
        </template>
      </el-table-column>
    </el-table>

3、typescript事件

<script setup lang="tsx">
const getRowKeys = (row) => {
  return row.id
}
//展开自定义
const expands = ref<string[]>([])
const toggleExpand = (row) => {
  const key = getRowKeys(row)
  const index = expands.value.indexOf(key)
  if (index > -1) {
    expands.value.splice(index, 1) // 收起
  } else {
    expands.value.push(key) // 展开
  }
}
const isExpanded = (row) => {
  return expands.value.includes(getRowKeys(row))
}
</script>

4、测试数据

const tableData = [
  {
    id: 1,
    date: '2016-05-03',
    name: 'Tom',
    state: 'California',
    city: 'San Francisco',
    address: '3650 21st St, San Francisco',
    zip: 'CA 94114',
    expand: false,
    family: [
      {
        name: 'Jerry',
        state: 'California',
        city: 'San Francisco',
        address: '3650 21st',
        zip: 'CA 94114'
      },
      {
        name: 'Spike',
        state: 'California',
        city: 'San Francisco',
        address: '3650 21st ',
        zip: 'CA 94114'
      },
      {
        name: 'Tyke',
        state: 'California',
        city: 'San Francisco',
        address: '3650 21st ',
        zip: 'CA 94114'
      }
    ]
  },
  {
    id: 2,
    date: '2016-05-02',
    name: 'Tom',
    state: 'California',
    city: 'San Francisco',
    address: '3650 21st St, San Francisco',
    zip: 'CA 94114',
    expand: false,
    family: [
      {
        name: 'Jerry',
        state: 'California',
        city: 'San Francisco',
        address: '3650 21st St, San Francisco',
        zip: 'CA 94114'
      }
    ]
  }
]

5、样式

<!-- 样式 -->
<style scoped lang="scss">
// 子项背景色
:deep(.el-table__expanded-cell) {
  background-color: #cbdde2 !important;
}
// 子项居中
.expandcontent {
  width: 95%;
  margin: 0 auto;
}
</style>

到此这篇关于element-plus 按钮展开/隐藏功能实现的文章就介绍到这了,更多相关element-plus按钮展开内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3中 provide 和 inject 用法小结

    vue3中 provide 和 inject 用法小结

    父子组件传递数据时,使用的是props和emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦,这篇文章主要介绍了vue3中 provide 和 inject 用法,需要的朋友可以参考下
    2023-11-11
  • 详解vue computed的缓存实现原理

    详解vue computed的缓存实现原理

    这篇文章主要介绍了vue computed的缓存实现原理,帮助大家更好的理解和学习使用vue,感兴趣的朋友可以了解下
    2021-04-04
  • Vue2.0 事件的广播与接收(观察者模式)

    Vue2.0 事件的广播与接收(观察者模式)

    这篇文章主要介绍了Vue2.0 事件的广播与接收(观察者模式),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • vue+webrtc(腾讯云) 实现直播功能的实践

    vue+webrtc(腾讯云) 实现直播功能的实践

    本文主要介绍了vue+webrtc(腾讯云) 实现直播功能的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • element的el-upload组件上传文件跨域问题的几种解决

    element的el-upload组件上传文件跨域问题的几种解决

    跨域问题网上搜索很多,感觉情况都不一样,本文主要介绍了element的el-upload组件上传文件跨域问题的几种解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Vue.js递归组件构建树形菜单

    Vue.js递归组件构建树形菜单

    这篇文章主要介绍了用Vue.js递归组件构建一个可折叠的树形菜单的教学内容,有兴趣的朋友跟着学习下。
    2017-12-12
  • 分析Vue指令实现原理

    分析Vue指令实现原理

    自定义指令是vue中使用频率仅次于组件,其包含bind、inserted、update、componentUpdated、unbind五个生命周期钩子。本文将对vue指令的工作原理进行相应介绍
    2021-06-06
  • vue之子组件如何修改父组件的值

    vue之子组件如何修改父组件的值

    这篇文章主要介绍了vue之子组件如何修改父组件的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Vue3之状态管理器(Pinia)详解及使用方式

    Vue3之状态管理器(Pinia)详解及使用方式

    这篇文章主要介绍了Vue3之状态管理器(Pinia)详解及使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vant-List-@load事件一直触发的解决

    vant-List-@load事件一直触发的解决

    这篇文章主要介绍了vant-List-@load事件一直触发的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

最新评论