vue中用table_vue封装element中table组件

后台系统,table被用的次数比较多,所以决定提出来作为组件

1.新建一个Table.vue文件

ref="mutipleTable"

@selection-change="handleSelectionChange">

:key='column.label'

:label="column.label"

:align="column.align"

:width="column.width">

{{scope.row[column.prop]}}

v-if="operates.list.filter(_x=>_x.show === true).length > 0">

:plain="btn.plain" @click.native.prevent="btn.method(key,scope.row)">{{ btn.label }}

export default {

props: {

list: {

type: Array,

default: []

}, // 数据列表

columns: {

type: Array,

default: []

}, // 需要展示的列 === prop:列数据对应的属性,label:列名,align:对齐方式,width:列宽

operates: {}, // 操作按钮组 === label: 文本,type :类型(primary / success / warning / danger / info / text),show:是否显示,icon:按钮图标,plain:是否朴素按钮,disabled:是否禁用,method:回调方法

options: {

type: Object,

default: {

stripe: false, // 是否为斑马纹 table

highlightCurrentRow: false // 是否要高亮当前行

},

} // table 表格的控制参数

},

//组件

components: {

expandDom: {

functional: true,

props: {

row: Object,

render: Function,

index: Number,

column: {

type: Object,

default: null

}

},

render: (h, ctx) => {

const params = {

row: ctx.props.row,

index: ctx.props.index

}

if (ctx.props.column) params.column = ctx.props.column

return ctx.props.render(h, params)

}

}

},

// 数据

data () {

return {

pageIndex: 1,

multipleSelection: [] // 多行选中

}

},

mounted () {

},

computed: {

},

methods: {

// 多行选中

handleSelectionChange (val) {

this.multipleSelection = val

this.$emit('handleSelectionChange', val)

},

// 显示 表格操作弹窗

showActionTableDialog () {

console.log(4444)

this.$emit('handelAction')

}

}

}

2.调用组件

@handleSelectionChange="handleSelectionChange"

:options="options"

:columns="columns"

:operates="operates"

>

import iTable from '../components/Table'

export default {

components: {iTable},

data () {

return {

list: [

{

id: '24',

title: '编号3',

state:0

},

{

id: '23',

title: '编号3',

state:1

},

{

id: '23',

title: '编号3',

state:2

},

{

id: '2',

title: '编号3',

state:0

},

{

id: '223',

title: '编号3',

state:1

},

{

id: '2444',

title: '编号3',

state:1

},

], // table数据

options: {

stripe: true, // 是否为斑马纹 table

loading: false, // 是否添加表格loading加载动画

highlightCurrentRow: true, // 是否支持当前行高亮显示

mutiSelect: true, // 是否支持列表项选中功能

}, // table 的参数

columns: [

{

prop: 'id',

label: '编号',

align: 'center',

},

{

prop: 'title',

label: '标题',

align: 'center',

formatter: (row, column, cellValue) => {

return `${row.title}`

}

},

{

prop: 'state',

label: '状态',

align: 'center',

render: (h, params) => {

return h('el-tag', {

props: {type: params.row.state === 0 ? 'success' : params.row.state === 1 ? 'info' : 'danger'} // 组件的props

}, params.row.state === 0 ? '上架' : params.row.state === 1 ? '下架' : '审核中')

}

},

], // 需要展示的列

operates: {

width: 200,

fixed: 'right',

list: [

{

id:'1',

label: '编辑',

type: 'warning',

show: true,

icon: 'el-icon-edit',

plain: true,

disabled: false,

method: (index, row) => {

this.handleEdit(index, row)

}

},

{

id:'2',

label: '删除',

type: 'danger',

icon: 'el-icon-delete',

show: true,

plain: false,

disabled: false,

method: (index, row) => {

this.handleDel(index, row)

}

}

]

} // 列操作按钮

}

},

methods: {

// 选中行

handleSelectionChange (val) {

console.log('val:', val)

},

// 编辑

handleEdit (index, row) {

console.log(' index:', index)

console.log(' row:', row)

},

// 删除

handleDel (index, row) {

console.log(' index:', index)

console.log(' row:', row)

}

}

}

https://juejin.im/post/5a6941dc518825732258e321

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Vue 使用 `table_vue` 并通过 `render` 函数渲染表格,可以按照以下步骤进行操作: 1. 安装 `table_vue`: ```bash npm install table_vue --save ``` 2. 在组件引入 `table_vue` 和 `render` 函数: ```javascript import { Table, TableColumn } from 'table_vue'; ``` 3. 在 `render` 函数使用 `Table` 和 `TableColumn` 组件来渲染表格: ```javascript render() { return ( <div> <Table data={this.tableData}> <TableColumn prop="name" label="Name" /> <TableColumn prop="age" label="Age" /> <TableColumn prop="gender" label="Gender" /> </Table> </div> ); } ``` 在上述代码,`Table` 组件通过 `data` 属性接受表格数据,`TableColumn` 组件通过 `prop` 和 `label` 属性分别指定数据字段和列名。 4. 最后,在组件导出 `render` 函数: ```javascript export default { name: 'MyTable', data() { return { tableData: [ { name: 'John', age: 20, gender: 'Male' }, { name: 'Mary', age: 25, gender: 'Female' }, { name: 'Tom', age: 30, gender: 'Male' }, ], }; }, render() { // ... }, }; ``` 在上述代码,`tableData` 是表格数据,可以通过 `data` 属性传递给 `Table` 组件。 ### 回答2: 在Vue,可以使用`v-table`组件和render函数来渲染table。 首先,需要在Vue组件导入`Vue`和`v-table`组件。可以在项目的入口文件或需要使用table组件引入。 ``` import Vue from 'vue' import VTable from 'v-table' Vue.use(VTable) ``` 然后,在模板使用`v-table`组件来渲染table。可以设置表格的列和数据。 ``` <template> <v-table :columns="columns" :data="data"></v-table> </template> ``` 在Vue组件的data属性定义表格的列和数据。 ``` export default { data() { return { columns: [ { title: '姓名', key: 'name' }, { title: '年龄', key: 'age' }, { title: '性别', key: 'gender' } ], data: [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 22, gender: '女' }, { name: '王五', age: 25, gender: '男' } ] } } } ``` 最后,使用render函数渲染`v-table`组件。可以将模板的`<v-table>`替换为`<div>`,然后在render函数返回渲染的内容。 ``` export default { render(h) { return h('div', [ h(VTable, { props: { columns: this.columns, data: this.data } }) ]) } } ``` 通过上述步骤,就可以使用render函数渲染table。在表格展示指定的列和数据,实现表格的渲染和展示。 ### 回答3: 在Vue使用`table_vue`组件,可以使用render函数来渲染table。 首先,需要在Vue组件导入`table_vue`组件。可以使用以下代码进行导入: ```javascript import table_vue from './table_vue.vue'; ``` 然后,在Vue组件的`render`函数,使用`h`函数来创建`table_vue`组件的实例并渲染。可以使用以下代码示例: ```javascript render: function(h){ return h(table_vue); } ``` 在这个示例,`h`函数接受一个组件选项对象或者组件构造函数作为参数,并返回一个VNode节点。通过调用`h(table_vue)`,`table_vue`组件会被实例化,并返回一个VNode节点用于渲染。 最后,将这个渲染函数添加到Vue组件的`render`选项,即可在页面渲染`table_vue`组件。 需要注意的是,使用render函数渲染组件时,是无法直接使用`template`属性的,需要使用`render`函数来动态生成DOM结构。这种方式更加灵活,可以根据需要动态创建组件组件间的关系。 以上是使用render函数来渲染`table_vue`组件的方法。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值