diff --git a/examples/routers/table.vue b/examples/routers/table.vue index 5f34c8a..e4a0191 100644 --- a/examples/routers/table.vue +++ b/examples/routers/table.vue @@ -11,6 +11,7 @@ { type: 'expand', render: (h) => { + console.log('______hover______'); return h(etable); }, width: 50 diff --git a/src/components/table/cell.vue b/src/components/table/cell.vue index bfcaaac..0b8d853 100644 --- a/src/components/table/cell.vue +++ b/src/components/table/cell.vue @@ -19,11 +19,9 @@ </div> </template> <script> - import Vue from 'vue'; import Cell from './expand'; import Icon from '../icon/icon.vue'; import Checkbox from '../checkbox/checkbox.vue'; - import { findComponentUpward } from '../../utils/assist'; export default { name: 'TableCell', @@ -46,7 +44,7 @@ return { renderType: '', uid: -1, - context: this.$parent.$parent.currentContext + context: this.$parent.$parent.$parent.currentContext }; }, computed: { @@ -70,76 +68,11 @@ } }, methods: { - compile () { - if (this.column.render && this.renderType === 'render') { - // todo 兼容真 Render,后期废弃旧用法 - let isRealRender = true; - const Table = findComponentUpward(this, 'Table'); - if (Table.context) isRealRender = false; - - if (isRealRender) { -// this.$el.innerHTML = ''; -// const component = new Vue({ -// functional: true, -// render: (h) => { -// return this.column.render(h, { -// row: this.row, -// column: this.column, -// index: this.index -// }); -// } -// }); -// const Cell = component.$mount(); -// this.$refs.cell.appendChild(Cell.$el); - } else { - const $parent = this.context; - const template = this.column.render(this.row, this.column, this.index); - const cell = document.createElement('div'); - cell.innerHTML = template; - - this.$el.innerHTML = ''; - let methods = {}; - Object.keys($parent).forEach(key => { - const func = $parent[key]; - if (typeof(func) === 'function' && (func.name === 'boundFn' || func.name === 'n')) { - methods[key] = func; - } - }); - const res = Vue.compile(cell.outerHTML); - // 获取父组件使用的局部 component - const components = {}; - Object.getOwnPropertyNames($parent.$options.components).forEach(item => { - components[item] = $parent.$options.components[item]; - }); - - const component = new Vue({ - render: res.render, - staticRenderFns: res.staticRenderFns, - methods: methods, - data () { - return $parent._data; - }, - components: components - }); - if ($parent.$store != undefined) { - component.$store = $parent.$store; - } - component.row = this.row; - component.column = this.column; - - const Cell = component.$mount(); - this.$refs.cell.appendChild(Cell.$el); - } - } - }, - destroy () { - - }, toggleSelect () { - this.$parent.$parent.toggleSelect(this.index); + this.$parent.$parent.$parent.toggleSelect(this.index); }, toggleExpand () { - this.$parent.$parent.toggleExpand(this.index); + this.$parent.$parent.$parent.toggleExpand(this.index); } }, created () { @@ -154,20 +87,6 @@ } else { this.renderType = 'normal'; } - }, - mounted () { - this.$nextTick(() => { - this.compile(); - }); - }, - beforeDestroy () { - this.destroy(); - }, - watch: { - naturalIndex () { - this.destroy(); - this.compile(); - } } }; </script> diff --git a/src/components/table/table-body.vue b/src/components/table/table-body.vue index 5aeb901..a374624 100644 --- a/src/components/table/table-body.vue +++ b/src/components/table/table-body.vue @@ -5,12 +5,13 @@ </colgroup> <tbody :class="[prefixCls + '-tbody']"> <template v-for="(row, index) in data"> - <tr - :class="rowClasses(row._index)" - @mouseenter.stop="handleMouseIn(row._index)" - @mouseleave.stop="handleMouseOut(row._index)" - @click.stop="clickCurrentRow(row._index)" - @dblclick.stop="dblclickCurrentRow(row._index)"> + <table-tr + :row="row" + :prefix-cls="prefixCls" + @mouseenter.native.stop="handleMouseIn(row._index)" + @mouseleave.native.stop="handleMouseOut(row._index)" + @click.native.stop="clickCurrentRow(row._index)" + @dblclick.native.stop="dblclickCurrentRow(row._index)"> <td v-for="column in columns" :class="alignCls(column, row)"> <Cell :fixed="fixed" @@ -25,7 +26,7 @@ :expanded="rowExpanded(row._index)" ></Cell> </td> - </tr> + </table-tr> <tr v-if="rowExpanded(row._index)"> <td :colspan="columns.length" :class="prefixCls + '-expanded-cell'"> <Expand :key="row" :row="row" :render="expandRender" :index="row._index"></Expand> @@ -37,6 +38,7 @@ </template> <script> // todo :key="row" + import TableTr from './table-tr.vue'; import Cell from './cell.vue'; import Expand from './expand.js'; import Mixin from './mixin'; @@ -44,7 +46,7 @@ export default { name: 'TableBody', mixins: [ Mixin ], - components: { Cell, Expand }, + components: { Cell, Expand, TableTr }, props: { prefixCls: String, styleObject: Object, @@ -72,16 +74,6 @@ } }, methods: { - rowClasses (_index) { - return [ - `${this.prefixCls}-row`, - this.rowClsName(_index), - { - [`${this.prefixCls}-row-highlight`]: this.objData[_index] && this.objData[_index]._isHighlight, - [`${this.prefixCls}-row-hover`]: this.objData[_index] && this.objData[_index]._isHover - } - ]; - }, rowChecked (_index) { return this.objData[_index] && this.objData[_index]._isChecked; }, @@ -91,9 +83,6 @@ rowExpanded(_index){ return this.objData[_index] && this.objData[_index]._isExpanded; }, - rowClsName (_index) { - return this.$parent.rowClassName(this.objData[_index], _index); - }, handleMouseIn (_index) { this.$parent.handleMouseIn(_index); }, diff --git a/src/components/table/table-tr.vue b/src/components/table/table-tr.vue new file mode 100644 index 0000000..6fb1bfd --- /dev/null +++ b/src/components/table/table-tr.vue @@ -0,0 +1,31 @@ +<template> + <tr :class="rowClasses(row._index)"><slot></slot></tr> +</template> +<script> + export default { + props: { + row: Object, + prefixCls: String + }, + computed: { + objData () { + return this.$parent.objData; + } + }, + methods: { + rowClasses (_index) { + return [ + `${this.prefixCls}-row`, + this.rowClsName(_index), + { + [`${this.prefixCls}-row-highlight`]: this.objData[_index] && this.objData[_index]._isHighlight, + [`${this.prefixCls}-row-hover`]: this.objData[_index] && this.objData[_index]._isHover + } + ]; + }, + rowClsName (_index) { + return this.$parent.$parent.rowClassName(this.objData[_index], _index); + }, + } + }; +</script> \ No newline at end of file -- libgit2 0.21.4