vue父子组件传递参数渲染Echart不显示问题

304 阅读2分钟

事情要从上周五说起,距离下班还有10分钟,我的内心

74f737fa-a116-498c-ae91-56f1b0e4c592.jpeg

突然收到测试一条消息,表格的最后一个折现图不渲染

74f737fa-a116-498c-ae91-56f1b0e4c592.jpeg

我心想,距离下班还有10分钟,这不分分钟搞定,看了一圈的代码,居然感觉没有任何问题,此时我的内心:

74f737fa-a116-498c-ae91-56f1b0e4c592.jpeg

但这并不妨碍我按时下班,于是度过一个愉快的周末后,一到周一我就匆匆的去看了那个问题。 表格的折线图其实就是就是表格里面的拿过来渲染的,看一个大概的趋势,表格里面的数据取到了,但是这线图并未渲染,看了控制台,最后一条数据最先渲染,但是没取到值? 185d3b52-d72b-4fca-86fd-ab9c0476bb03.jpeg

疑问点:

1.合计的折线图为何最先渲染

2.折线图的数据在页面展示了但是传给echart的值为undefined

我百思不得其解,于是又回去详看代码,然后发现,其他表格的数据都在一个list里面做循环,最后一条合计数据被单独拎出来了, 页面初始化渲染的时候,由于list是空数组,没有渲染list, 但是合计是个对象,虽然没有值,但是渲染了折线图,才导致全部传值为undefined, 后续接口返回数据,list的数据做循环操作第一次渲染图表,展示折线图,但是合计的数据并未重新渲染折线图,原因就是写折线图的那个小老弟,只在折线图组件中的mounted生命周期的时候进行了一次渲染,所以后续组件数据变化,echart不再渲染。

原因总结:

1.父子组件传值的时候,父组件传值更新给子组件,子组件不会重新创建,只会更新子组件,所以,子组件的created的和mounted的生命周期里面调用的函数,只会执行一次。

所以在针对以上问题,有两个解决方法:

1、在合计还没有数据的时候,先不要渲染,可以在元素上使用v-if来控制。 2、在折线图的组件里面加上监听,每次折线图的数据更新的时候,都可以重新渲染折线图

我采用了第二种方式:

img_v3_02dg_22fab871-5962-4231-b5c1-cb2c92664f9g.jpg

页面成功渲染出折线图,所以通过以上这个问题,我们可以得出一个结论,那就是:下班最重要!

74f737fa-a116-498c-ae91-56f1b0e4c592.jpeg