关于tab页切换时数据不刷新,渲染报错的问题

今天遇到一个tab页切换,但是出现数据仍然保持,渲染和数据获取顺序错误的情况,导致渲染报错。花费了几个小时特此记录一下。

问题描述:增加一个显示错误信息的功能,错误信息后端采用单独的接口返回数据。错误信息采用v-if进行条件渲染。由于代码逻辑比较复杂不展开说明。

报错情况:

 打印情况:正常情况下先打印tab标识=>后端数据=>组件传值,但是在点击错误信息返回后发现打印顺序出错了。

解决方案:

在网上查了大量的资料,首先想到获取数据于渲染的顺序问题,排查过后发现获取数据的生命周期都是正确的,使用了nextTick,forceUpdate都不管用。

后面受启发会不会是两个接口但是共用的一个变量,导致切换时变量内容未及时更新。思路:在请求数据的方法之前对数组进行一次清空;卧槽,几个小时的问题就这么解决了。

原始:

 更改后:

 

 

### FullCalendar 外层包裹 `div` 显示的原因分析 FullCalendar 的外层包裹 `div` 显示可能是由多种原因引起的,以下是可能的原因及其解决方案: #### 1. **CSS 样式冲突** 如果外部样式表或其他 CSS 文件中的规则覆盖了 FullCalendar 容器的样式,则可能导致其可见。例如,容器的高度被设置为零或设置了 `display: none;`。 - 解决方案:检查 FullCalendar 所属的父级元素是否有以下问题: - 是否存在 `height: 0px;` 或未定义高度。 - 是否存在 `visibility: hidden;` 或 `opacity: 0;`。 - 使用浏览器开发者工具查看是否存在其他样式冲突[^1]。 ```css /* 确保 FullCalendar 容器具有足够的高度 */ .fc { height: auto; } ``` --- #### 2. **初始化配置错误** 在 FullCalendar 初始化过程中,如果没有正确指定 DOM 节点的选择器或者绑定的对象存在,则可能会导致日历无法渲染。 - 解决方案:确认 HTML 中的容器 ID 和 JavaScript 初始化代码匹配,并确保该节点已加载完毕后再执行初始化逻辑。 ```javascript // 正确的初始化示例 document.addEventListener('DOMContentLoaded', function () { var calendarEl = document.getElementById('calendar'); // 确认此 id 存在于面中 var calendar = new FullCalendar.Calendar(calendarEl, { initialView: 'dayGridMonth' }); calendar.render(); }); ``` --- #### 3. **动态加载内容重新调整布局** 当 FullCalendar 是在一个隐藏的标签(如 TabPanel)或模态框中首次渲染,由于初始状态下容器尺寸为零,可能导致日历未能正常计算大小。 - 解决方案:在切换到包含 FullCalendar 的区域后,手动调用 `.render()` 方法刷新日历布局[^1]。 ```javascript function refreshCalendar() { var calendarApi = $('#calendar').fullCalendar('getCalendar'); calendarApi.render(); // 强制重绘日历 } $('#tabLink').on('shown.bs.tab', function (e) { refreshCalendar(); // 当 tab 显示更新日历 }); ``` --- #### 4. **JavaScript 错误阻止脚本运行** 如果面中有其他 JavaScript 报错,可能会中断 FullCalendar 的初始化过程,从而导致其显示。 - 解决方案:打开浏览器控制台,查找任何潜在的 JS 错误并修复它们。特别注意是否缺少必要的库文件(如 jQuery 或 Moment.js),因为某些版本的 FullCalendar 依赖于这些资源。 --- #### 5. **数据源为空** 即使以上条件均满足,但如果传递给 FullCalendar 的事件数组为空,也可能让用户感觉整个组件“消失”。这是因为默认情况下,无事件的日历仅展示日期网格而附加额外视觉效果。 - 解决方案:验证传入的数据结构是否符合预期格式,并至少提供一条测试记录以观察行为变化。 ```javascript var eventsData = [ { title: 'Test Event', start: '2023-10-15' } ]; var calendar = new FullCalendar.Calendar(document.getElementById('calendar'), { events: eventsData, initialView: 'dayGridMonth' }); calendar.render(); ``` --- ### 总结 综上所述,FullCalendar 外层 `div` 显示的主要原因是样式冲突、初始化失败、动态加载处理当以及前端环境异常等问题所致。逐一排查上述可能性即可定位具体根源并采取相应措施加以修正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值