如果一个页面有多个router-view,加载时会重复加载接口。解决这个问题,可使用以下方式:

1,将router-view加入name属性。

<el-container >
  <el-tabs type="border-card" style="width: 99%;height: 99%"  @tab-click="handleClick">
    <el-tab-pane label="统计1">
      <router-view name="statistics1"></router-view>
    </el-tab-pane>
    <el-tab-pane label="统计2">
      <router-view name="statistics2"></router-view>
    </el-tab-pane>
    <el-tab-pane label="统计3">
      <router-view name="statistics3"></router-view>
    </el-tab-pane>
    <el-tab-pane label="统计4">
      <router-view name="statistics4"></router-view>
    </el-tab-pane>
  </el-tabs>
</el-container>

2,路由规则里面加入 components,使router-view加入name属性与页面对应。

{
	name:'statistics',
	path:'/rpa/statistics',
	component:StatisticsLayout,
	redirect: '/rpa/statistics/statisticsData1',
	children:[
		{
			name:'statisticsData1',
			path:'statisticsData1',
			components: {statistics1:() => import('@/view/portal/process/StatisticsData1.vue')},
			meta:{
				title:'统计1'
			},
		},{
			name:'statisticsData2',
			path:'statisticsData2',
			components: {statistics2:() => import('@/view/portal/process/StatisticsData2.vue')},
			meta:{
				title:'统计2'
			},
		},{
			name:'statisticsData3',
			path:'statisticsData3',
			components: {statistics3:() => import('@/view/portal/process/StatisticsData3.vue')},
			meta:{
				title:'统计3'
			},
		}, {
			name:'statisticsData4',
			path:'statisticsData4',
			components: {statistics4:() => import('@/view/portal/process/StatisticsData4.vue')},
			meta:{
				title:'统计4'
			},
		}
	]
},

3,将JS点击事件对应到路由规则的name属性

  methods:{
    handleClick(tab, event) {
      if(tab.index == '0'){
        this.$router.push({name:'statisticsData1'});
      } else if(tab.index == '1'){
        this.$router.push({name:'statisticsData2'});
      }else if(tab.index == '2'){
        this.$router.push({name:'statisticsData3'});
      }else if(tab.index == '3'){
        this.$router.push({name:'statisticsData4'});
      }
    }
  },

这样,每次tab切换加载页面时,只加载对应页面的接口。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐