el-tab 按需加载

21 篇文章 0 订阅
6 篇文章 0 订阅

elementui 的 el-tab 会同时加载几个tab,可能需求想切换tab时才去调用接口等,当然可以用v-if去控制,但是这样每次都重新渲染,用户体验不好,没法缓存数据。如果想缓存和按需加载,可以尝试使用如下方法:

优化前:

<template>
  <el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane label="用户管理" name="first">
      <UserManage />
    </el-tab-pane>
    <el-tab-pane label="配置管理" name="second">
      <ConfigManage />
    </el-tab-pane>
  </el-tabs>
</template>

<script>
import UserManage from './component/UserManage'
import ConfigManage from './component/ConfigManage'

  export default {
    components: { UserManage, ConfigManage },
    data() {
      return {
        activeName: 'first'
      };
    },
    methods: {
      handleClick(tab, event) {
        console.log(tab, event);
      }
    }
  };
</script>

优化后:

方案一:直接用lazy属性

方案二:组件懒加载

方案三:如下,其实是组件懒加载+动态组件,直接用方案二就行了,方案三有点画蛇添足的意思。。。

<template>
  <el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane label="用户管理" name="first">
      <UserManage />
    </el-tab-pane>
    <el-tab-pane label="配置管理" name="second">
      <component :is="configManageCom" />
    </el-tab-pane>
  </el-tabs>
</template>

<script>
import UserManage from './component/UserManage'

  export default {
    components: {
      UserManage,
      ConfigManage: () => import(/* webpackPrefetch: true */ './component/ConfigManage')
    },
    data() {
      return {
        activeName: 'first',
        configManageCom: null,
      };
    },
    methods: {
      handleClick(tab) {
        if (tab.name === 'second') {
          this.configManageCom = 'config-manage'
        }
      }
    }
  };
</script>
要实现前端el-plan-tab随机加载组件,你可以按照以下步骤操作: 1. 在el-plan-tab组件中定义一个数组,用于存储要加载的组件的名称或路径。 2. 使用JavaScript中的Math.random()方法生成一个随机数,得到要加载的组件在数组中的索引。 3. 根据随机索引获取要加载的组件的名称或路径。 4. 使用Vue.js提供的异步组件实现动态加载组件,即使用<component :is="componentName"></component>标签动态加载组件。 下面是一个参考代码示例: ``` <template> <el-plan-tab> <component :is="componentName"></component> </el-plan-tab> </template> <script> export default { name: 'RandomComponentLoader', data() { return { components: ['ComponentA', 'ComponentB', 'ComponentC'], // 定义要加载的组件名称 componentName: '', // 定义当前要加载的组件名称 }; }, mounted() { this.loadRandomComponent(); }, methods: { loadRandomComponent() { const randomIndex = Math.floor(Math.random() * this.components.length); // 生成随机索引 this.componentName = this.components[randomIndex]; // 获取要加载的组件名称 import(`@/components/${this.componentName}.vue`).then(() => { // 使用Vue.js提供的异步组件实现动态加载组件 console.log(`${this.componentName} loaded`); }); }, }, }; </script> ``` 在上面的代码示例中,我们定义了一个components数组,其中存储了三个要加载的组件名称。在mounted钩子函数中调用了loadRandomComponent方法,该方法使用Math.random()方法生成一个随机索引,并根据该索引获取要加载的组件名称。然后,使用异步组件实现动态加载组件,并将组件名称赋值给componentName变量,从而实现随机加载组件的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值