递归组件/动态组件

今天封装组件的时候,遇到几个关于递归组件/动态组件的小插曲,记录一下。

递归组件:需要再开一个script标签,否则不生效。

<template>
  <div class="menu_content">
    ......
      </template>
      <el-sub-menu
        v-if="item.children && item.children.length > 1"
        :index="item.path"
      >
        <template #title>
          <el-icon>
            <component :is="item.meta.icon"></component>
          </el-icon>
          <span>{{ item.meta.title }}</span>
        </template>
        递归组件
        <Menu :menuList="item.children"></Menu>
      </el-sub-menu>
    </template>
  </div>
</template>

<script setup lang="ts">
import { useRouter } from 'vue-router'
// 获取路由器对象
let $router = useRouter()

// 获取父组件传递来的全部组件信息
defineProps(['menuList'])

// 路由跳转 // index是路由的path
const goRouter = (vc: any) => {
  $router.push(vc.index)
}
</script>

<!-- 递归组件的名字一定要另开一个script标签,且要保持语言要一致 -->
<script lang="ts">
export default {
  name: 'Menu',
}
</script>

动态组件

#default="{ route, Component }",利用router-view的插槽,route代表出口的当前路由,Component代表是当前组件

<template>
  <!-- 路由的过渡效果 -->
  <router-view #default="{ route, Component }">
    <transition enter-active-class="animate__animated animate__fadeInDown">
      <component :is="Component"></component>
    </transition>
  </router-view>
</template>

<script setup lang="ts"></script>

<!-- 给组件个名字 -->
<script lang="ts">
export default {
  name: 'Main',
}
</script>

<style scoped lang="scss"></style>

动态组件还可以用于,组件的tab切换,比如:

 

...  
  <!-- 左侧图标 -->
  <el-icon style="margin-right: 10px" @click="changeIcon">
    <!-- Fold -->
    <component :is="settingStore.isExpand ? 'Expand' : 'Fold'"></component>
  </el-icon>
...

就酱紫......受不了了,8886.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值