当前位置: 首页 > web >正文

深入解析 <component :is> 在 Vue3 组合式中的使用与局限

1.问题

说明:在 Vue3 中使用组合式 API 时,动态组件通过 is 属性渲染可能会遇到组件未正确显示的问题。实际写法如下所示:我的目的就是遍历数组顶部组件,里面有个type就是对应的is属性(因为数据放置在数据库,属性值是字符串,不是组件对象)。它渲染出了dom节点就是没有展示。

<script setup>import DashBoardHeader from './dash-board-header/index.vue'
</script><componentv-for="(item,index) in dashBoardHeaderAll.dashBoardHeader":key="index":is="item.type":universalStyle="dashBoardHeaderAll.dashBoardHeaderUniversalStyle":getData="item.data":getTitle="item.title":getStyle="item.style":param="item.param":unit="item.unit"></component>

2.分析

说明:Vue 3 组合式传字符串只会匹配全局注册,不会自动匹配局部注册组件名。官网写法如下,也就是component的值是个组件对象,而不是字符串。

3.解决

说明:我们通过字段映射的方式,让它的属性值变成组件对象。或者注册成全局组件。或者改成选项式写法。

<script setup>
import DashBoardHeader from './dash-board-header/index.vue'const componentsMap = {DashBoardHeader: DashBoardHeader
}
</script><componentv-for="(item,index) in dashBoardHeaderAll.dashBoardHeader":key="index":is="componentsMap[item.type]":universalStyle="dashBoardHeaderAll.dashBoardHeaderUniversalStyle":getData="item.data":getTitle="item.title":getStyle="item.style":param="item.param":unit="item.unit"></component>

4.结论 

  • Vue 2:如果传字符串,会先查找当前组件的局部注册,匹配到就用;找不到再查全局注册。

  • Vue 3 选项式 API:为了兼容 Vue 2,传字符串依然会匹配局部注册组件名。

  • Vue 3 组合式 API(<script setup>):如果传字符串,只会去查全局注册组件名,不会匹配局部注册名;要让它工作,需要传组件对象变量,或者在模板中通过映射把字符串转成组件对象。

http://www.xdnf.cn/news/17011.html

相关文章:

  • 基于Dockerfile 部署一个 Flask 应用
  • Word怎样转换为PDF
  • 【设计模式】 原则
  • CH32V单片机启用 FPU 速度测试
  • Conda和pip的使用记录
  • stm32FLASH RAM 详解说明
  • Vue 3.0 Composition API:重新定义组件逻辑的组织方式
  • 解决mac在安装nvm过程中可能遇到的一些问题
  • nodejs读写文件
  • 自动驾驶中的传感器技术14——Camera(5)
  • AI Agent开发学习系列 - LangGraph(7): 带有条件判断的Conditional Graph
  • L1、L2正则化的几何解释
  • Redis 通用命令
  • Git、Gitee、GitHub、GitLab完整讲解:从基础到进阶
  • 【BTC】挖矿
  • 编程与数学 03-002 计算机网络 19_网络新技术研究
  • Android 15 中禁用/启用应用的系统级方法
  • GaussDB 约束的使用举例
  • 机器人学中路径规划(Path Planning)和轨迹生成(Trajectory Generation)关系
  • 小智服务器Java安装编译(xinnan-tech)版
  • 麦肯锡咨询公司PEI经典面试题目汇总
  • gbase8s 常见表约束介绍
  • 18-C语言:第19天笔记
  • 知识随记-----Qt 实战教程:使用 QNetworkAccessManager 发送 HTTP POST
  • Ubuntu系统VScode实现opencv(c++)图像翻转和旋转
  • Java语言核心特性全解析:从面向对象到跨平台原理
  • 【学习笔记】Java并发编程的艺术——第1章 并发编程的挑战
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第三天(JavaScript)
  • Maven - 并行安全无重复打包构建原理揭秘
  • sqli-labs通关笔记-第28a关GET字符注入(关键字过滤绕过 手注法)