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

深入解析 <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.dtcms.com/a/311169.html

相关文章:

  • 关于Web前端安全防御之点击劫持的原理及防御措施
  • Docker容器中文PDF生成解决方案
  • JavaScript特殊集合WeakMap 的使用及场景介绍
  • C++ lambda表达式与线程库
  • String boot 接入 azure云TTS
  • 20250802安装CP2102N的驱动程序(适配飞凌的OK3576-C)
  • 如何在Ubuntu上部署excalidraw
  • Seal Report:一款免费开源的报表工具
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量
  • 计算机网络:什么是任播
  • 【计算机网络】Socket网络编程
  • 从零开始构建AI Agent评估体系:12种LangSmith评估方法详解
  • QUdpSocket 详解:从协议基础、通信模式、数据传输特点、应用场景、调用方式到实战应用全面解析
  • Linux网络编程【基于UDP网络通信的字典翻译服务】
  • M|银翼杀手
  • Web 开发 10
  • K8s+Nginx-ingress+Websocket基础知识理解
  • 系统思考:超越线性分析
  • python创建一个excel文件
  • MyBatis 批量操作 XML 实现方式
  • 【BTC】挖矿难度调整
  • Vue 详情模块 3
  • Matplotlib - Python图表可视化利器
  • Vue3核心语法进阶(computed与监听)
  • 除数博弈(动态规划)
  • cs336之注意pytorch的tensor在哪里?(assert的使用)
  • vue3渲染html数据并实现文本修改
  • 【7.5 Unity AssetPostprocessor】
  • 大模型 + 垂直场景:搜索 / 推荐 / 营销 / 客服领域开发有哪些新玩法?
  • Flask 框架全面详解