1蝉娜、通過v-show切換展示el-table出現(xiàn)抖動問題
解決方法:
在el-table由隱藏到顯示的dom更新后立刻對el-table進行重新布局(也就是調(diào)用el-table的doLayout方法)霜医,例如在nextTick或update生命周期中調(diào)用doLayout:
beforeUpdate() {
this.$nextTick(() => {
this.$refs.xxx.doLayout()
})
}
//或者使用下面的更新
update() {
this.$refs.xxx.doLayout()
}
2芯咧、用 v-if 控制增減 table 的列出現(xiàn)抖動問題
因為有時會出現(xiàn)渲染不對問題焊夸,可以通過給這些列綁定key以正確渲染苛败,例如 :key="1"。踩的坑是寫成 :key="Math.random()"镰矿,導(dǎo)致出現(xiàn)table抖動問題......
<el-table :data="tableData" v-loading="loading" :key="tableKey" ref="table">
<el-table-column prop="id" label="ID" align="center">
</el-table-column>
</el-table>
3琐驴、設(shè)置了overflow:auto,el-table自動檢測適應(yīng)出現(xiàn)抖動
這造成了一種情況,即上下滾動條的出現(xiàn)時秤标,觸發(fā)寬度绝淡,使得上下滾動條消失,再次觸發(fā)寬度變換苍姜,然后如此循環(huán)牢酵。flexbox 子元素設(shè)置了 overflow: auto 導(dǎo)致的瀏覽器 bug。
解決辦法:
- 檢查布局中的:overflow: auto衙猪, 避免flexbox 子元素設(shè)置這個屬性.
給.el-table__body添加 width: 100%!important; 屬性馍乙,強制寬度,增加如下樣式:
::v-deep .el-table__body{
width: 100% !important;
}
- 在el-table中增加overflow屬性垫释,代碼如下:
<el-table :data="tableData" style="width: 100%; overflow: auto;" ref="table">
<el-table-column prop="id" label="ID" align="center">
</el-table-column>
</el-table>
出現(xiàn)抖動的原因很多丝格,但無外乎渲染以及寬度計算的問題,希望大家都能準確找到原因并成功解決它~~