Table support real Render function to render Cell
This commit is contained in:
parent
687c4562f1
commit
87b6ef9d8b
2 changed files with 75 additions and 37 deletions
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<Table border :context="self" :columns="columns7" :data="data6"></Table>
|
<Table border :columns="columns7" :data="data6"></Table>
|
||||||
<abc></abc>
|
<Button @click="handleAdd"> + 1</Button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
@ -10,13 +10,23 @@
|
||||||
components: { abc },
|
components: { abc },
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
self: this,
|
data1: 1,
|
||||||
|
// self: this,
|
||||||
columns7: [
|
columns7: [
|
||||||
{
|
{
|
||||||
title: '姓名',
|
title: '姓名',
|
||||||
key: 'name',
|
key: 'name',
|
||||||
render (row, column, index) {
|
// render (row, column, index) {
|
||||||
return `<abc></abc>`;
|
// return `<abc></abc>`;
|
||||||
|
// }
|
||||||
|
render: (h, row, column, index) => {
|
||||||
|
return h('div', [
|
||||||
|
h('Button',{
|
||||||
|
on: {
|
||||||
|
click: this.handleClick
|
||||||
|
}
|
||||||
|
}, 'hello')
|
||||||
|
])
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -61,6 +71,11 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
ttt () {
|
||||||
|
return this.data1 + 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
show (index) {
|
show (index) {
|
||||||
this.$Modal.info({
|
this.$Modal.info({
|
||||||
|
@ -70,6 +85,12 @@
|
||||||
},
|
},
|
||||||
remove (index) {
|
remove (index) {
|
||||||
this.data6.splice(index, 1);
|
this.data6.splice(index, 1);
|
||||||
|
},
|
||||||
|
handleAdd () {
|
||||||
|
this.data1++;
|
||||||
|
},
|
||||||
|
handleClick () {
|
||||||
|
this.$Message.info('111')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,24 @@
|
||||||
methods: {
|
methods: {
|
||||||
compile () {
|
compile () {
|
||||||
if (this.column.render) {
|
if (this.column.render) {
|
||||||
|
// 兼容真 Render,后期废弃旧用法
|
||||||
|
let isRealRender = false;
|
||||||
|
try {
|
||||||
|
this.column.render(this.row, this.column, this.index);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
isRealRender = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRealRender) {
|
||||||
|
const component = new Vue({
|
||||||
|
render: (h) => {
|
||||||
|
return this.column.render(h, this.row, this.column, this.index);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const Cell = component.$mount();
|
||||||
|
this.$refs.cell.appendChild(Cell.$el);
|
||||||
|
} else {
|
||||||
const $parent = this.context;
|
const $parent = this.context;
|
||||||
const template = this.column.render(this.row, this.column, this.index);
|
const template = this.column.render(this.row, this.column, this.index);
|
||||||
const cell = document.createElement('div');
|
const cell = document.createElement('div');
|
||||||
|
@ -62,8 +80,6 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const res = Vue.compile(cell.outerHTML);
|
const res = Vue.compile(cell.outerHTML);
|
||||||
// todo 临时解决方案
|
|
||||||
|
|
||||||
// 获取父组件使用的局部 component
|
// 获取父组件使用的局部 component
|
||||||
const components = {};
|
const components = {};
|
||||||
Object.getOwnPropertyNames($parent.$options.components).forEach(item => {
|
Object.getOwnPropertyNames($parent.$options.components).forEach(item => {
|
||||||
|
@ -85,6 +101,7 @@
|
||||||
const Cell = component.$mount();
|
const Cell = component.$mount();
|
||||||
this.$refs.cell.appendChild(Cell.$el);
|
this.$refs.cell.appendChild(Cell.$el);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
destroy () {
|
destroy () {
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue