您现在的位置是:网站首页> 编程资料编程资料
关于ElementUI自定义Table支持render_vue.js_
2023-05-24
559人已围观
简介 关于ElementUI自定义Table支持render_vue.js_
ElementUI自定义Table支持render
ElementUI中的Table组件可以通过render-header属性通过render函数渲染表头,对于数据单元格并没有相关支持,虽然可以通过自定义列,但是在某些操作中直接用·render·形式进行渲染会更加有效,我一般喜欢通过数据的形式配置表格的内容,所以对ElementUI中的Table组件进行二次封装。
首先编写用于表头和数据单元格的部分:
TableHeaderCell.js
export default { name: 'TableHeadCell', functional: true, props: { render: Function, index: Number, column: Object, scopeColumn: Object, columns: Array, data: Array }, render: (h, ctx) => { if (typeof ctx.props.render === 'function') { const params = { index: ctx.props.index, column: ctx.props.column, scopeColumn: ctx.props.scopeColumn, columns: ctx.props.columns, data: ctx.props.data, _self: ctx } return ctx.props.render.call(ctx.parent.$parent, h, params) } else { return h('span', ctx.props.column.label || ctx.props.column.prop || ctx.props.scopeColumn.property) } } }TableCell.js
export default { name: 'TableCell', functional: true, props: { row: Object, render: Function, index: Number, column: Object, scopeColumn: Object, columns: Array, data: Array }, render: (h, ctx) => { if (typeof ctx.props.render === 'function') { const params = { row: ctx.props.row, index: ctx.props.index, column: ctx.props.column, scopeColumn: ctx.props.scopeColumn, columns: ctx.props.columns, data: ctx.props.data, _self: ctx } return ctx.props.render.call(ctx.parent.$parent, h, params) } else { if (typeof ctx.props.column.formatter === 'function') { return h('span', ctx.props.column.formatter( ctx.props.row, ctx.props.scopeColumn, ctx.props.row[ctx.props.column.prop], ctx.props.index ) ) } return h('span', ctx.props.row[ctx.props.column.prop]) } } }最后编写表格主要部分:index.vue
使用示例:
ElementUI-Table表头排序
ElementUI-Table表头自带排序功能,和排序事件,但是目前只是对当前界面的数据进行排序。
- 项目需求:点击表头排序的时候,对所有数据进行排序。
- 初步方案:在点击排序按钮的时,在排序事件sort-change 中,进行数据请求,此时会先重拍一次当前页面的数据,再渲染接口返回数据。用户体验不是很好。
- 优化方案:使用render-header自定义tableHeader,此时要使用render函数来创建表头。
getheaderTime(h) { const This = this return h('div', { }, ['告警时间', h('span', { class: 'iline-table-sort' }, [ h('i', { 'class': { 'el-icon-caret-bottom': This.orderByType === 'desc', 'el-icon-caret-top': This.orderByType === 'asc', 'active': This.orderBy === 'daqTime' }, attrs: { 'orderByType': 'desc', 'orderType': 'daqTime' }, on: { click: This.clickHandler }, style: { fontSize: '22px' } }) ] ) ]) }以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
您可能感兴趣的文章:
相关内容
- vue添加vue-awesome-swiper轮播组件方式_vue.js_
- vue自定义指令添加跟随鼠标光标提示框v-tooltip方式_vue.js_
- vue项目如何实现Echarts在label中获取点击事件_vue.js_
- Vue虚拟dom被创建的方法_vue.js_
- vue计算属性computed方法内传参方式_vue.js_
- vue项目中轮询状态更改方式(钩子函数)_vue.js_
- 关于vue文件中index.vue的使用方法_vue.js_
- 详解Vue3 SFC 和 TSX 方式调用子组件中的函数_vue.js_
- ant-design-vue中的table自定义格式渲染解析_vue.js_
- React 模块联邦多模块项目实战详解_React_
