當我們在使用element plus框架時,有時會遇到屏幕突然變暗,然后來一句莫名其妙的報錯ResizeObserver loop limit exceeded,其實這是因為改變屏幕大小時el-table導致的報錯
網上給出了幾種解決方案,我試了其中兩種可以實現
方案一:
在App.vue/main.js中加入以下這段代碼即可解決:
// app.vue寫在script里面 main.js寫在app掛在完之后
const debounce = (fn, delay) => {let timerreturn (...args) => {if (timer) {clearTimeout(timer)}timer = setTimeout(() => {fn(...args)}, delay)}
}const _ResizeObserver = window.ResizeObserver;
window.ResizeObserver = class ResizeObserver extends _ResizeObserver{constructor(callback) {callback = debounce(callback, 200);super(callback);}
}
方案二:
使用 v-if 延遲渲染
如果表格在初始加載時不需要立即顯示所有數據,可以使用 v-if 來控制表格的渲染時機。例如,在數據加載完成后再渲染表格。
<el-table v-if="dataLoaded" :data="tableData" ref="myTable"><!-- columns -->
</el-table>data() {return {dataLoaded: false,tableData: []};
},
methods: {loadData() {// 模擬數據加載setTimeout(() => {this.tableData = [/* 數據 */];this.dataLoaded = true;}, 1000);}
}
方案三:
給表格的所有列設置固定寬度,此方案雖缺乏靈活性,但可以解決前面兩種存在頁面因尺寸變化而導致的閃切問題
const columns = [{title: '工號',colAttrs: { width: 160 }, // 重點dataIndex: 'employeeNumber',},{title: '姓名',colAttrs: { width: 160 }, // 重點dataIndex: 'userFullName',},{title: '職位',colAttrs: { width: 800 }, // 重點dataIndex: 'positionName',}
];