update Table
update Table
This commit is contained in:
parent
b2012015da
commit
486d4fda19
9 changed files with 132 additions and 106 deletions
|
@ -2,15 +2,17 @@
|
|||
<div :class="classes">
|
||||
<template v-if="renderType === 'index'">{{naturalIndex + 1}}</template>
|
||||
<template v-if="renderType === 'selection'">
|
||||
<Checkbox :checked="checked" @on-change="toggleSelect" :disabled="disabled"></Checkbox>
|
||||
<Checkbox :value="checked" @on-change="toggleSelect" :disabled="disabled"></Checkbox>
|
||||
</template>
|
||||
<template v-if="renderType === 'normal'">{{{ row[column.key] }}}</template>
|
||||
<template v-if="renderType === 'normal'"><span v-html="row[column.key]"></span></template>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Vue from 'vue';
|
||||
import Checkbox from '../checkbox/checkbox.vue';
|
||||
|
||||
export default {
|
||||
name: 'TableCell',
|
||||
components: { Checkbox },
|
||||
props: {
|
||||
prefixCls: String,
|
||||
|
@ -29,7 +31,7 @@
|
|||
return {
|
||||
renderType: '',
|
||||
uid: -1,
|
||||
content: this.$parent.$parent.content
|
||||
content: this.$parent.$parent.currentContent
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
|
@ -51,14 +53,34 @@
|
|||
const cell = document.createElement('div');
|
||||
cell.innerHTML = template;
|
||||
const _oldParentChildLen = $parent.$children.length;
|
||||
$parent.$compile(cell); // todo 这里无法触发 ready 钩子
|
||||
// $parent.$compile(cell); // todo 这里无法触发 ready 钩子
|
||||
const _newParentChildLen = $parent.$children.length;
|
||||
|
||||
if (_oldParentChildLen !== _newParentChildLen) { // if render normal html node, do not tag
|
||||
this.uid = $parent.$children[$parent.$children.length - 1]._uid; // tag it, and delete when data or columns update
|
||||
}
|
||||
this.$el.innerHTML = '';
|
||||
this.$el.appendChild(cell);
|
||||
// this.$el.appendChild(cell);
|
||||
let methods = {};
|
||||
let $_parent = this.$parent;
|
||||
while($_parent != null && $_parent._name != '<Table>'){
|
||||
$_parent = $_parent.$parent;
|
||||
}
|
||||
if ($_parent) {
|
||||
Object.keys($_parent).forEach(key => {
|
||||
const func = this.$parent.$parent.$parent[`${key}`];
|
||||
if(typeof(func) === 'function' &&func.name === 'boundFn'){
|
||||
methods[`${key}`] = func;
|
||||
}
|
||||
});
|
||||
}
|
||||
const res = Vue.compile(cell.outerHTML);
|
||||
const compt = new Vue({
|
||||
render: res.render,
|
||||
staticRenderFns: res.staticRenderFns,
|
||||
methods: methods
|
||||
});
|
||||
compt.$mount(this.$el);
|
||||
}
|
||||
},
|
||||
destroy () {
|
||||
|
@ -73,7 +95,7 @@
|
|||
this.$parent.$parent.toggleSelect(this.index);
|
||||
}
|
||||
},
|
||||
compiled () {
|
||||
created () {
|
||||
if (this.column.type === 'index') {
|
||||
this.renderType = 'index';
|
||||
} else if (this.column.type === 'selection') {
|
||||
|
@ -84,8 +106,10 @@
|
|||
this.renderType = 'normal';
|
||||
}
|
||||
},
|
||||
ready () {
|
||||
this.compile();
|
||||
mounted () {
|
||||
this.$nextTick(() => {
|
||||
this.compile();
|
||||
});
|
||||
},
|
||||
beforeDestroy () {
|
||||
this.destroy();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue