应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

vue组件封装,简单的表格组件封装。组件插槽简单使用。Table 组件封装

3373人阅读 2020/9/19 15:19 总访问:5182859 评论:0 收藏:0 手机
分类: 前端

看到设计图上有一个类似的表格需要重复使用,就封装一个简单的表格组件,方便重复使用,很简单就是做数据展示,不进行编辑这。数据通过外面传递过去,然后里边循环生成行和列就行,然后加点样式,就是因为类似的样式要重复使用。

效果如下:

封装组件

代码很简单,表头想着通用一点就做了一个插槽,让外面传递过来,当然也可以做成传递数据在组件里边生成。然后行列的数据就是传递一串json,过来做一个双循环解析一下数据即可。

行的显示风格做成了组件的参数,居中或者左对齐等,可以根据需要多写几套样式,通过参数传递过来决定显示方式。表头的显示方式也写了两个样式,居中或者左对齐。代码如下,很简单。

  1. <template>
  2. <div >
  3. <table class="zuxia_table">
  4. <!-- <tr class="zuxia_table_header">
  5. <th>姓名</th>
  6. <th>班级</th>
  7. <th>事件</th>
  8. <th>时间</th>
  9. </tr> -->
  10. <!-- 表头也可以做成插槽,方便表头在引用组件的时候自定义 -->
  11. <slot name="zuxia_table_header"></slot>
  12. <!-- 根据传递过来的json直接循环获取数据显示 -->
  13. <tr v-for="(item, index) in rowdata" :key="index" class="content_tr" :class="row_style">
  14. <td v-for="(tditem,zindex) in item" :key="zindex">{{tditem}}</td>
  15. </tr>
  16. </table>
  17. </div>
  18. </template>
  19. <script>
  20. export default {
  21. // 组件名字
  22. name: 'ZuxiaTable',
  23. // 组件参数
  24. props: {
  25. percentage: {
  26. type: Number,
  27. default: 0
  28. },
  29. title: {
  30. type: String,
  31. default: '默认标题'
  32. },
  33. // 行的显示风格,居中或者左对齐等,可以根据需要多写几套样式
  34. row_style: {
  35. type: String,
  36. default: 'content_tr_center'
  37. },
  38. rowdata: {
  39. type: Array,
  40. default: () => {
  41. return []
  42. },
  43. // required: true
  44. }
  45. },
  46. data() {
  47. return {
  48. // tr_type:"content_tr_center"
  49. }
  50. },
  51. components: {
  52. },
  53. mounted() {
  54. },
  55. beforeDestroy () {
  56. },
  57. methods: {
  58. }
  59. }
  60. </script>
  61. <style lang="scss" scoped>
  62. .zuxia_table{
  63. margin-top: 20px;
  64. width: 100%;
  65. border-collapse: collapse;
  66. .zuxia_table_header{
  67. background-color: rgba(13, 81, 137, 0.5);
  68. // opacity: 0.5;
  69. th{
  70. height: 13px;
  71. font-size: 14px;
  72. font-family: Microsoft YaHei;
  73. font-weight: 400;
  74. color: #23FFFC;
  75. line-height: 33px;
  76. padding-left: 10px;
  77. }
  78. }
  79. // 提供一个左对齐的样式,引用组件的时候可以直接用
  80. .zuxia_table_header_left
  81. {
  82. text-align: left;
  83. }
  84. .content_tr{
  85. height: 41px;
  86. // background: #082044;
  87. background-color: rgba(8, 32, 68, 0.4);
  88. td{
  89. font-size: 12px;
  90. font-family: Microsoft YaHei;
  91. font-weight: 400;
  92. color: #FFFFFF;
  93. line-height: 33px;
  94. // padding-left: 10px;
  95. }
  96. }
  97. //----------- start 行风格-左对齐 --------------
  98. .content_tr_left{
  99. td{
  100. padding-left: 10px;
  101. }
  102. }
  103. .content_tr_left>td:first-child{
  104. padding-left: 15px;
  105. }
  106. //----------- end 行风格-左对齐 --------------
  107. //----------- start 行风格-居中 --------------
  108. .content_tr_center{
  109. td{
  110. text-align: center;
  111. }
  112. }
  113. .content_tr_center>td:first-child{
  114. padding-left: 15px;
  115. // text-align: left;
  116. }
  117. //----------- end 行风格-居中 --------------
  118. }
  119. </style>

使用组件

先引用一下组件,以及提供一下测试的json数据

  1. import ZuxiaGrid from '@/views/component/zuxia_grid.vue'
  2. import ZuxiaTable from '@/views/component/zuxia_table.vue'
  3. export default {
  4. components: {
  5. ZuxiaGrid,
  6. ZuxiaTable
  7. },
  8. data() {
  9. return {
  10. rowdata:[
  11. {
  12. name:"2022级计算机1班",
  13. class:"yy1",
  14. content:"xx",
  15. datetiem:'8-12 09:33:52',
  16. pro:"40%",
  17. zh:"50%",
  18. sort:"1"
  19. },
  20. {
  21. name:"2022级计算机1班",
  22. class:"yy2",
  23. content:"xx",
  24. datetiem:'8-15 09:33:52',
  25. pro:"40%",
  26. zh:"50%",
  27. sort:"3"
  28. },
  29. {
  30. name:"2022级计算机1班",
  31. class:"yy3",
  32. content:"xx",
  33. datetiem:'8-13 09:33:52',
  34. pro:"40%",
  35. zh:"50%",
  36. sort:"2"
  37. },
  38. {
  39. name:"2022级计算机1班",
  40. class:"yy2",
  41. content:"xx",
  42. datetiem:'8-15 09:33:52',
  43. pro:"40%",
  44. zh:"50%",
  45. sort:"3"
  46. },
  47. {
  48. name:"2022级计算机1班",
  49. class:"yy2",
  50. content:"xx",
  51. datetiem:'8-15 09:33:52',
  52. pro:"40%",
  53. zh:"60%",
  54. sort:"6"
  55. },
  56. ],
  57. newrowdata:[
  58. {
  59. name:"张三丰",
  60. class:"2022级计算机1班",
  61. content:"通过什么什么什么什么什么评估",
  62. datetiem:'8-15 09:33:52',
  63. },
  64. {
  65. name:"张三丰",
  66. class:"2022级计算机1班",
  67. content:"通过什么什么什么什么什么评估",
  68. datetiem:'8-15 09:33:52',
  69. },
  70. {
  71. name:"张三丰",
  72. class:"2022级计算机1班",
  73. content:"通过什么什么什么什么什么评估",
  74. datetiem:'8-15 09:33:52',
  75. },
  76. {
  77. name:"张三丰",
  78. class:"2022级计算机1班",
  79. content:"通过什么什么什么什么什么评估",
  80. datetiem:'8-15 09:33:52',
  81. },
  82. {
  83. name:"张三丰",
  84. class:"2022级计算机1班",
  85. content:"通过什么什么什么什么什么评估",
  86. datetiem:'8-15 09:33:52',
  87. }
  88. ]
  89. },

使用组件

  1. <div class="bc_left_com">
  2. <ZuxiaGrid style="height:100%">
  3. <template #content>
  4. <ZuxiaTable row_style="content_tr_left" :rowdata="rowdata">
  5. <template #zuxia_table_header>
  6. <tr class="zuxia_table_header zuxia_table_header_left">
  7. <th>班级名称</th>
  8. <th>班主任</th>
  9. <th>评估</th>
  10. <th>实验</th>
  11. <th>项目</th>
  12. <th>综合</th>
  13. <th>排名</th>
  14. </tr>
  15. </template>
  16. </ZuxiaTable>
  17. </template>
  18. </ZuxiaGrid>
  19. </div>
  20. <div class="bc_middle_com">
  21. <ZuxiaGrid title="最新使用记录" style="height:100%">
  22. <template #content>
  23. <ZuxiaTable row_style="content_tr_center" :rowdata="newrowdata">
  24. <template #zuxia_table_header>
  25. <tr class="zuxia_table_header">
  26. <th>姓名</th>
  27. <th>班级</th>
  28. <th>事件</th>
  29. <th>时间</th>
  30. </tr>
  31. </template>
  32. </ZuxiaTable>
  33. </template>
  34. </ZuxiaGrid>
  35. </div>

效果如下:左边的表格表头与数据都是左对齐的,右边的表格表头与数据是居中的,如果需要其他风格的可以多提供几套样式,通过参数传递进去就行了。表头是通过插槽放进去的,不同的风格可以在外面写更简单

外面那块高亮格子的组件封装可以参考:https://www.tnblog.net/aojiancc2/article/details/7826


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue.js+Layer实现表格数据绑定与更新

一:使用Vue.js绑定好数据与更新事件 使用v-on绑定好事件,在事件里边直接把该行数据传递进去,在更新方法里边就可以直接...

vue.js 实现省市联动

HTML代码&lt;divid=&quot;pro_citys&quot;&gt; 省:&lt;selectid=&quot;provice&quot;v-on:change=&quot;prochange()&quo...

vue.js常见问题

一:花括号当做字符串显示的问题1:检查下绑定到vue.js的id是否重复,如果id重复了,就有可能存在这种问题,因为有可能把数...

vue.js常用指令

v-html可以把字符串当成一个html来渲染,而不是原样输出Html类似.net mvc中的@Html.Raw()方法&lt;divv-html=&quot;item.tit...

干货!div滚动到一定位置就固定他vue中实现一侧滚动到底部就固定

尊重原创:转载请注名出处div滚动到一定位置就固定他,例如左边的内容很多,右边的内容很少,如果不处理滚动到一定位置后右...

vue.js常用指令事件绑定等vue过滤器解析状态过滤器多个参数vue表格状态解析vue解析类型element ui解析类型状态el-tag

按照html的编码显示:v-html&lt;div class=&quot;font_info&quot; v-html=&quot;item.Content&quot;&gt;{{item.Content}}&l...

vue.js if用法

vue.js if可以做一些判断例如我们要把下面这个输出varvm=newVue({ el:&quot;#content&quot;, data:{ titles:[&quot;小明...

vue.js 学习日记第一章-安装vue开发环境

官网:https://cn.vuejs.org/v2/guide/ 这是一篇学习性文章,不定时更新,用来记录我学习vue.js的过程。 首先,是v...

vue.js 学习日记第二章-在vue中编写function及一些简单指令

官网:https://cn.vuejs.org/v2/guide/ vue.js 学习日记第一章:http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第三章-vue中的简单事件及事件修饰符

官网:https://cn.vuejs.org/v2/guide/ vue.js 学习日记第二章:http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第四章-vue中文本框数据获取与绑定及computed计算属性

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第三章: http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第五章-v-if和v-for指令的使用方式

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第四章: http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第六章-vue组件初步学习

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第五章: http://www.tnblog.net/18323015640/article/details/2...

vue.js学习日记第七章-搭建脚手架

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第六章: http://www.tnblog.net/18323015640/article/details/2...

vue实现好友选中效果

逛过vue官网肯定会发现一个有趣的指令“v-for”,相比与以前拼接html代码确实要上档次一点,而且减少了工作量,先看一波效...

js时间格式化vue.js时间格式化带T 时间格式化

也可以借助moment库, 参考:https://www.tnblog.net/aojiancc2/article/details/8079moment库有点大,推荐可以使用day.js...