诚城的成长 诚城的成长
首页
  • 高数基础
  • 数一

    • 高等数学
    • 线性代数
    • 概率论与数理统计
  • 820

    • 数据结构
    • 计算机操作系统
  • 英一

    • 单词
    • 语法
    • 阅读理解
    • 作文
  • 政治

    • 马克思主义基本原理
    • 毛泽东
    • 近代史
    • 思修
    • 时事
  • openpose
  • html5
  • css3
  • UI

    • Tailwind Css
    • Element-Plus
    • UniApp
  • 框架

    • Vue3
  • 拓展包

    • 包管理工具
    • 包开发
  • 开发语言

    • C语言
    • PHP
    • Phyton
  • 框架

    • Laravel
  • 会计

    • 初级经济法基础
    • 初级会计实务
  • 软考

    • 信息系统项目管理师
  • 博客

    • vitepress
    • vuepress
  • manim
  • git
  • vsCode
  • latex
  • docker
  • axios
  • vim
  • mac
  • Jetbrains

    • phpstorm
    • clion
突发奇想
GitHub (opens new window)

诚城

我有N个梦想……
首页
  • 高数基础
  • 数一

    • 高等数学
    • 线性代数
    • 概率论与数理统计
  • 820

    • 数据结构
    • 计算机操作系统
  • 英一

    • 单词
    • 语法
    • 阅读理解
    • 作文
  • 政治

    • 马克思主义基本原理
    • 毛泽东
    • 近代史
    • 思修
    • 时事
  • openpose
  • html5
  • css3
  • UI

    • Tailwind Css
    • Element-Plus
    • UniApp
  • 框架

    • Vue3
  • 拓展包

    • 包管理工具
    • 包开发
  • 开发语言

    • C语言
    • PHP
    • Phyton
  • 框架

    • Laravel
  • 会计

    • 初级经济法基础
    • 初级会计实务
  • 软考

    • 信息系统项目管理师
  • 博客

    • vitepress
    • vuepress
  • manim
  • git
  • vsCode
  • latex
  • docker
  • axios
  • vim
  • mac
  • Jetbrains

    • phpstorm
    • clion
突发奇想
GitHub (opens new window)
  • start
  • pinia

  • router
  • setup
  • solt
  • computed
  • component.md

    • 组件基础
    • 通信
    • 其他
      • 全局注册
      • 动态组件
      • 递归
  • map
  • vue3
  • component.md
诚城
2022-07-24
目录

其他原创

# 全局注册

# 动态组件

可用于 tab 渲染。

// 伪代码
<template>
  <view class="content">
    <!-- 使用 component 来实现动态渲染组件 -->
    <component :is="current.comName"></component>
    <!-- 需要注意的是 is 为动态传递 -->

    <!-- 若需传递字符串给 is 则需要注册,在 setup 下的 script 中注册 -->
    <!-- <component is="A"></component> -->

  </view>
</template>

<script setup lang="ts">
import { reactive, markRaw } from 'vue'
import A from '@/component/A'
import B from '@/component/B'
import C from '@/component/C'

type Tabs = {
  name: string,
  comName: any
}

// Pick 从 指定类型中,摘取对应对象的类型
type Com = Pick<Tabs, 'comName'>

const data = reactive<Tabs[]>([
  {
    name: '我是a组件',
    comName: A // 可以直接渲染,会 proxy(代理) ,耗性能
  }, {
    name: '我是b组件',
    comName: markRaw(B) // 这样组件不会被 proxy ,提高性能
  }, {
    name: '我是C组件',
    comName: markRaw(C)
  }
])

let current = reactive<Com>({
  comName: data[0].comName
})

</script>

<script lang="ts">
export default {
  components: {
    A,
    B,
    C
  }
}
</script>

# 递归

一般用树形,如: 侧边栏菜单。

特别注意,递归调用时,外层时间记得用 stop 不然点击内层组件,会递归调用事件。

 <div class="ml-2">
  <div @click.stop="clickItem(item)" :key="index" v-for="(item, index) in data">
    {{ item.name }}
    <!-- 递归调用 本组件 item?.children?.leng 当item 的 children 没有定义 length时,返回 undefine,而不会报错  -->
        <!-- item?.children?.leng ?? []  当item 的 children 没有定义 length时,返回 [] -->
    <TreeItem @click.stop="clickItem(items)" v-if="item?.children?.leng" :key="indexs"
      v-for="(items, indexs) in item.children"></TreeItem>
  </div>
</div>
上次更新: 2022/08/23, 18:12:45
通信
map

← 通信 map→

Theme by Vdoing | Copyright © 2022-2022 carveybunt | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
×

特别申明:

本站所有内容均为个人理解或转载,如有不当之处,敬请大佬指导!