vxe-table 通过渲染器可以支持任意的 vue 组件,但在渲染大部分组件后默认是无法直接使用的,需要解决好跨组件之间的冲突
虽然可以正常渲染和显示,但是会无法选中下拉选项,这就是跨组件的事件冲突,下面会提到解决办法
<vxe-table
border
show-overflow
height="600"
:data="tableData"
:edit-config="{trigger: 'click', mode: 'row'}">
<vxe-table-column type="checkbox" width="60">vxe-table-column>
<vxe-table-column type="seq" width="80">vxe-table-column>
<vxe-table-column field="name" title="ElInput" min-width="140" :edit-render="{type: 'default'}">
<template v-slot:edit="scope">
<el-input v-model="scope.row.name">el-input>
template>
vxe-table-column>
<vxe-table-column field="sex" title="ElSelect" width="140" :edit-render="{type: 'default'}">
<template v-slot:edit="scope">
<el-select v-model="scope.row.sex">
<el-option v-for="item in sexList" :key="item.value" :label="item.label" :value="item.value">el-option>
el-select>
template>
<template v-slot="{ row }">{
{ getSelectLabel(row.sex, sexList) }}template>
vxe-table-column>
vxe-table>
export default {
data () {
return {
tableData: [
{
name: '名字1', sex: '0', age: 24},
{
name: '名字2', sex: '1', age: 26},
{
name: '名字3', sex: '1', age: 28},
{
name: '名字4', sex: '1', age: 30}
],
sexList: [
{
label: '男', value: '1'},
{
label: '女', value: '0'}
]
}
},
methods: {
getSelectLabel (value, list) {
let item = list.find(item => item.value === value)
return item ? item.label : null
}
}
}
npm install vxe-table vxe-table-plugin-element
import Vue from 'vue'
import VXETable from 'vxe-table'
import VXETablePluginElement from 'vxe-table-plugin-element'
import 'vxe-table-plugin-element/dist/style.css'
Vue.use(VXETable)
VXETable.use(VXETablePluginElement)
VXETable.interceptor.add('event.clearActived', (params, event) => {
// 比如点击了某个组件的弹出层面板之后,此时被激活单元格不应该被自动关闭,通过返回 false 可以阻止默认的行为。
if (event.target.className.indexOf('other-popper') > -1) {
return false
}
})
到此结束!可以开始动手玩玩了哈。