事情要从上周五说起,距离下班还有10分钟,我的内心
突然收到测试一条消息,表格的最后一个折现图不渲染
我心想,距离下班还有10分钟,这不分分钟搞定,看了一圈的代码,居然感觉没有任何问题,此时我的内心:
但这并不妨碍我按时下班,于是度过一个愉快的周末后,一到周一我就匆匆的去看了那个问题。
表格的折线图其实就是就是表格里面的拿过来渲染的,看一个大概的趋势,表格里面的数据取到了,但是这线图并未渲染,看了控制台,最后一条数据最先渲染,但是没取到值?
疑问点:
1.合计的折线图为何最先渲染
2.折线图的数据在页面展示了但是传给echart的值为undefined
我百思不得其解,于是又回去详看代码,然后发现,其他表格的数据都在一个list里面做循环,最后一条合计数据被单独拎出来了, 页面初始化渲染的时候,由于list是空数组,没有渲染list, 但是合计是个对象,虽然没有值,但是渲染了折线图,才导致全部传值为undefined, 后续接口返回数据,list的数据做循环操作第一次渲染图表,展示折线图,但是合计的数据并未重新渲染折线图,原因就是写折线图的那个小老弟,只在折线图组件中的mounted生命周期的时候进行了一次渲染,所以后续组件数据变化,echart不再渲染。
原因总结:
1.父子组件传值的时候,父组件传值更新给子组件,子组件不会重新创建,只会更新子组件,所以,子组件的created的和mounted的生命周期里面调用的函数,只会执行一次。
所以在针对以上问题,有两个解决方法:
1、在合计还没有数据的时候,先不要渲染,可以在元素上使用v-if来控制。 2、在折线图的组件里面加上监听,每次折线图的数据更新的时候,都可以重新渲染折线图
。
我采用了第二种方式:
页面成功渲染出折线图,所以通过以上这个问题,我们可以得出一个结论,那就是:下班最重要!