当前位置:   article > 正文

Element表格单元文本过长处理_eiementui表格单元格数据过长

eiementui表格单元格数据过长

element有提供一个表格组件,在做后台管理时,数据列表渲染会经常用到,不知道你有没有遇到过这种情况,就是表格中某一列的内容文本过长导致表格的高度会无限拔高。这种情况肯定是不允许的,所以就必须文本超出长度就必须限制一下。我能想到的就两种方法:第一种是超出长度就省略,后面加个按钮来控制,第二种就是限制高度,超出内容隐藏。按钮控制显示全部,这个的缺点是会有个滚动条。

这里我选择的是第一种,即文本过长,超出部分则省略,并设置个按钮来控制展开/收起。先看效果图: 

 为了方便使用特意将其封装成一个组件了,只要vue项目中引入了element即可直接使用:

TruncateText.vue组件代码:

该组件主要传两个参数,一个是过长的文本text,另一个是长度限制maxLength。

  1. <template>
  2. <div class="long-text">
  3. <div>{{ truncatedText }}</div>
  4. <el-button type="text" @click="toggleShowAll" v-if="isExpanded">{{showAll?'收起':'展开'}}</el-button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. props: {
  10. text: {
  11. type: String,
  12. required: true
  13. },
  14. maxLength: {
  15. type: Number,
  16. default: 20
  17. }
  18. },
  19. data() {
  20. return {
  21. showAll: false,
  22. localMaxLength: this.maxLength,
  23. }
  24. },
  25. computed:{
  26. truncatedText() {
  27. if (this.text.length <= this.localMaxLength) {
  28. return this.text;
  29. }
  30. return `${this.text.substring(0, this.maxLength)}...`;
  31. },
  32. isExpanded(){
  33. return this.text.length > this.maxLength;
  34. }
  35. },
  36. methods: {
  37. toggleShowAll() {
  38. if(this.showAll){ //true->false
  39. this.localMaxLength=this.maxLength;;
  40. }
  41. if(!this.showAll){
  42. this.localMaxLength=Infinity;
  43. }
  44. this.showAll = !this.showAll
  45. }
  46. }
  47. }
  48. </script>
  49. <style scoped>
  50. .long-text {
  51. display: flex;
  52. flex-direction: column;
  53. justify-content: flex-start;
  54. align-items: flex-start;
  55. }
  56. </style>

父组件table.vue使用示例:

  1. <template>
  2. <div class="table-wrapper">
  3. <el-table :data="tableData" class="my-table">
  4. <el-table-column prop="name" label="姓名"></el-table-column>
  5. <el-table-column label="描述">
  6. <template slot-scope="scope">
  7. <truncate-text :text="scope.row.description" :maxLength="50"></truncate-text>
  8. </template>
  9. </el-table-column>
  10. </el-table>
  11. </div>
  12. </template>
  13. <script>
  14. import TruncateText from './TruncateText.vue';
  15. export default {
  16. components: {
  17. TruncateText
  18. },
  19. data() {
  20. return {
  21. tableData: [
  22. { name: '张三', description: '这是一段非常长的描述,需常长的描述,需要截断并显示省略号,同时提常长的描述,需要截断并显示省略号,同时提常长的描述,需要截断并显示省略号,同时提要截断并显示省略号,同时提供展开/收起功能。' },
  23. { name: '李四', description: '这是另外一段很长的描述,同样需要截断并显示省略号,但是内容不太一样。'}
  24. ]
  25. };
  26. }
  27. };
  28. </script>
  29. <style>
  30. .table-wrapper {
  31. max-width: 800px;
  32. margin: 0 auto;
  33. }
  34. .my-table {
  35. font-size: 14px;
  36. }
  37. .el-table__body-wrapper {
  38. border: none;
  39. }
  40. .el-table__row:hover {
  41. background-color: #f5f7fa;
  42. }
  43. .truncate-text {
  44. display: inline-block;
  45. vertical-align: middle;
  46. max-width: 400px;
  47. }
  48. .truncated {
  49. position: relative;
  50. overflow: hidden;
  51. white-space: nowrap;
  52. text-overflow: ellipsis;
  53. }
  54. .more-btn {
  55. margin-top: 0.5em;
  56. }
  57. </style>

这是一个很简单的例子,但是实用性很高,业务中也会很常见,记录一下,方便下次直接拿来用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/91719
推荐阅读