From 5f847e35902edb00a445d5f101e2e84391ce1d9a Mon Sep 17 00:00:00 2001 From: SongWuKong <23303044+imswk@users.noreply.github.com> Date: Tue, 31 Aug 2021 14:23:45 +0800 Subject: [PATCH] fix(components): [el-table] width init error (close #3087) (#3117) --- .../components/table/src/table/style-helper.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/components/table/src/table/style-helper.ts b/packages/components/table/src/table/style-helper.ts index 40fd6a3de5..1615a96215 100644 --- a/packages/components/table/src/table/style-helper.ts +++ b/packages/components/table/src/table/style-helper.ts @@ -1,4 +1,4 @@ -import { onMounted, onUnmounted, computed, ref, watchEffect, watch, unref } from 'vue' +import { onMounted, onUnmounted, computed, ref, watchEffect, watch, unref, nextTick } from 'vue' import { addResizeListener, removeResizeListener, @@ -6,6 +6,7 @@ import { import throttle from 'lodash/throttle' import { parseHeight } from '../util' import { useGlobalConfig } from '@element-plus/utils/util' +import { on, off } from '@element-plus/utils/dom' import type { ResizableElement } from '@element-plus/utils/resize-event' import type { Table, TableProps } from './defaults' @@ -88,11 +89,11 @@ function useStyle( layout.updateColumnsWidth() syncPostion() } - - onMounted(() => { + onMounted(async () => { setScrollClass('is-scrolling-left') - bindEvents() store.updateColumns() + await nextTick() + bindEvents() doLayout() resizeState.value = { @@ -153,12 +154,13 @@ function useStyle( }, 10) const bindEvents = () => { - window.addEventListener('resize', doLayout) table.refs.bodyWrapper.addEventListener('scroll', syncPostion, { passive: true, }) if (props.fit) { addResizeListener(table.vnode.el as ResizableElement, resizeListener) + } else { + on(window, 'resize', doLayout) } } onUnmounted(() => { @@ -166,9 +168,10 @@ function useStyle( }) const unbindEvents = () => { table.refs.bodyWrapper?.removeEventListener('scroll', syncPostion, true) - window.removeEventListener('resize', doLayout) if (props.fit) { removeResizeListener(table.vnode.el as ResizableElement, resizeListener) + } else { + off(window, 'resize', doLayout) } } const resizeListener = () => {