须要在一个整屏切换的页面上显示多个Echarts图表,随屏幕切换显示不一样的Echarts图表javascript
这个目标看起来并不难,实现方法也有多种,目前想到的方法有如下:vue
实现思路:图表数据请求单独封装在一个组件中(做为子组件),并在该子组件中经过监听flag值(屏幕切换标志)变化来实现图表数据更新java
注意问题:Echarts图表须要挂载在DOM节点上,要求这个DOM的 id 惟一(注意,是在整个HTML中惟一,为不是在当前组件内惟一
)web
注意:本人测试失败并不表明该方法不行,只是不适合个人当前状况echarts
测试结果:失败svg
结果说明:没法实现DOM的 id 在整个HTML内惟一
。缘由在于,我是在 for 循环中引用的组件,至关因而重复使用该组件,那么不管怎样修改DOM的 id 值,HTML渲染的结果都是重复的 id测试
代码以下:this
<div v-for="(item, index) in scrollList" :key="index" :class="item.className"> …… <div class="echarts_box"> <!-- 渲染组件 --> <AnalyAllShow :curIndex="this.curIndex"></AnalyAllShow> </div> </div>
实现思路:将每个Echarts图表分别封装在一个组件中,而后在主界面组件内引用这些组件(使用v-for渲染多个组件
)spa
for 循环渲染多组件,参考自:https://blog.csdn.net/qq_35366269/article/details/98942292.net
注意问题:每一个组件内Echarts挂载的DOM的 id 须要保持不一样
测试结果:成功
代码以下:
<div v-for="(item, index) in scrollList" :key="index" :class="item.className"> …… <div class="echarts_box"> <!-- 渲染组件 --> <component :is="item.curType" :data="item.curData"></component> </div> </div>
注意,在绑定的数据中,须要添加组件数据 curType、curData,它们的值为引用的组件(封装Echarts的那几个组件)
scrollList: [ { id: 'one', ……, curType: 'EchartsBook', curData: 'EchartsBook' }, { id: 'two', ……, curType: 'EchartsDiary', curData: 'EchartsDiary' }, { id: 'three', ……, curType: 'EchartsEssay', curData: 'EchartsEssay' }, { id: 'four', ……, curType: 'EchartsVoice', curData: 'EchartsVoice' } ]
封装Echarts图表的组件:
import EchartsBook from './analy/EchartsBook.vue' import EchartsDiary from './analy/EchartsDiary.vue' import EchartsEssay from './analy/EchartsEssay.vue' import EchartsVoice from './analy/EchartsVoice.vue'
<component :is="item.curType" :data="item.curData"></component>
实例建立时,一次性加载全部Echarts数据