項目上使用了dhtmlx-gantt甘特圖插件,發現不放置於el-tab-pane頁簽的情況下能正常渲染甘特圖,但放在el-tab-pane頁簽容器的情況下則不能正常渲染,具體表現為:1.固定展示列列寬未渲染正確,渲染結果為140px,與配置期望結果不符;2.懸浮框不顯示。
通過打印渲染過程中的配置項發現,自定義的配置項並未生效,渲染前和渲染后的js配置項都不是預期的結果,因此推測是渲染的時候未正確讀取配置項,導致dhtmlx-gantt插件按自身默認值進行渲染。初步驗證,當gantt圖業務組件放在第二個頁簽的時候,渲染不正確;而當gantt圖業務組件放在第一個頁簽的時候,渲染就正確了。因此基本可以確定是el-tab對其下el-tab-pane渲染順序的問題導致的。
查閱相關文檔,了解到element基本上都是頁面上引用的所有組件都是同步渲染的,而dhtmlx-gantt甘特圖插件在加載配置項的時候可能對同步渲染不受用,因此這時候需要考慮異步渲染。異步渲染可以考慮使用v-if或者element自身提供lazy的屬性。v-if可以加在引用的gantt圖業務組件上,當el-tab的activeTab是當前pane的時候才進行渲染,這種方式比較簡單粗暴,但可能對用戶體驗會有一定影響;lazy屬性用於el-tab-pane上標識當前pane為懶加載,當且僅當el-tab的activeTab是當前pane的時候才進行渲染,和v-if的原理相近,但因為是element官方提供的屬性,element可能會提供一定的性能優化,因此較為推薦這種方式。
綜合上面的結論,最終選用了lazy屬性和v-if同時用,順利解決了問題。
"大概今生有些事,是提早都不可以明白其妙處。"