vue 动态加载并注册组件且通过 render动态创建该组件

功能:为每个 tab 动态创建不同的、特定的组件内容,而不需要大量的 import 组件并进行 component 注册

Index.vue

<template>
  <div class="content-left-menu">
    <div class="item-contain layout-content">
      <Tabs class="cmcc-ivu-tab2" type="card" closable>
        <TabPane v-for="k in zj" :label="k.label" >
          <loader :vueName="k.vueName"></loader>
        </TabPane>
      </Tabs>
    </div>
  </div>
</template>
<script>
 import loader from './EntryLoader.vue'
 
  export default {
    components: {loader},
    data() {
      return {
        zj:[
          {label:'tab1',vueName:'workflow/Index'},
          {label:'tab2',vueName:'workflow/Index2'},
          {label:'tab3',vueName:'workflow/Index3'}
        ]
      }
    }
  }
</script>

EntryLoader.vue

<script>
  export default {
    props: ['vueName'],
    data() {
      return {}
    },
    created() {
      this.$options.components[this.vueName] = require('@/components/' + this.vueName + '.vue')
    },
    render: function (createElement) {
      return createElement(this.vueName)
    }
  }
</script>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
动态创建不同组件并将它们拼接成一个新页面,并在接口路径中加上这个页面,可以使用Vue动态组件和路由的动态注册来实现。下面是一个示例: 首先,安装并配置Vue Router: ```bash npm install vue-router ``` 然后,在Vue项目的入口文件(一般是main.js)中引入Vue Router,并创建一个空的路由实例: ```javascript import Vue from 'vue'; import VueRouter from 'vue-router'; Vue.use(VueRouter); const router = new VueRouter(); ``` 在接口返回的数据中,包含了需要加载组件名称和对应的路径。你可以根据接口返回的数据动态注册路由和组件: ```javascript // 假设接口返回的数据格式如下: const apiData = [ { componentName: 'ComponentA', path: '/component-a' }, { componentName: 'ComponentB', path: '/component-b' }, // 其他组件和路径的配置 ]; // 循环遍历接口返回的数据,动态注册路由和组件 apiData.forEach(data => { const component = () => import(`@/components/${data.componentName}.vue`); router.addRoutes([ { path: data.path, component } ]); }); ``` 在上面的示例中,首先定义了一个`apiData`数组,其中包含了需要加载组件名称和对应的路径。然后使用`forEach`方法遍历`apiData`数组,在每次循环中动态注册路由和组件。通过`import()`函数动态导入组件,并使用箭头函数组件作为路由的组件属性。 最后,在Vue实例中使用该路由实例: ```javascript new Vue({ router, render: h => h(App) }).$mount('#app'); ``` 现在,你可以在接口路径中访问动态创建的页面,例如`/component-a`和`/component-b`。每个路径都会对应加载相应的组件。 需要注意的是,动态创建页面可能会导致过多的路由和组件而影响性能,所以在实际使用中请谨慎考虑。另外,你还需要根据实际需求对示例代码进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值