插槽实现步骤条向导的个性化模板注入,核心是父组件控制每步内容、子组件负责结构与状态流转;通过具名插槽(如step-0、basic-info)或作用域插槽动态匹配步骤,配合v-if条件渲染和v-slot精准注入,支持表单、图标、异步状态等任意模板。

用插槽实现步骤条向导的个性化模板注入,核心是让每一步的内容完全由父组件控制,而子组件只负责结构、状态流转和样式布局。关键在于结合具名插槽 + 动态绑定,而不是靠 props 传 HTML 字符串。
定义具名插槽对应每一步
在步骤条组件(如 StepWizard.vue)中,为每步预留独立插槽,推荐按索引或语义命名:
- 用
<slot name="step-0"></slot>、<slot name="step-1"></slot>等方式,明确对应第 0 步、第 1 步…… - 或更语义化:使用
<slot name="basic-info"></slot>、<slot name="payment"></slot>,配合 step 的id或name属性匹配 - 每个插槽可带默认内容(如“请填写基本信息”),提升未传内容时的可用性
父组件按需注入定制模板
调用时用 v-slot: 指令精准分发内容,支持访问父组件数据和事件:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 写法示例:
<template v-slot:step-0><UserInfoForm @submit="next" /></template> - 可嵌套任意结构:表单、图标、文字说明、异步加载状态组件等
- 所有插槽内容共享父组件作用域,能直接用
{{ form.name }}、@click="handleNext"
配合当前激活步做条件渲染
插槽本身不自动隐藏/显示,需由步骤条内部逻辑控制可见性:
立即学习“前端免费学习笔记(深入)”;
- 子组件用
v-if="currentStep === 0"包裹<slot name="step-0"></slot>,确保仅当前步内容被渲染 - 避免所有插槽同时挂载造成性能浪费或副作用(如表单自动聚焦、定时器启动)
- 若需预渲染后续步骤(如缓存表单状态),改用
v-show或配合keep-alive
支持动态步数与运行时插槽注册
当步骤数量不固定(如根据权限动态生成),可用作用域插槽传递元信息:
- 子组件暴露:
<slot name="step" :step="step" :index="index"></slot> - 父组件遍历步骤数组:
<template v-for="(s, i) in steps" :key="i" v-slot:step="{ step, index }">...</template> - 这样无需提前声明所有具名插槽,灵活适配配置化流程

















