【发布时间】:2019-01-22 16:13:04
【问题描述】:
我想将 vuetify 的 v-stepper 与 vue 路由器集成。我的要求如下:
- 每个步骤都有自己的路线(例如
/myform/step1、/myform/step2、/myform/step3等) - 每个步骤都是独立的组件,它是动态加载的(延迟加载)。
- 每个步骤都是动态创建的(例如通过循环)。
这更像是一个“什么是最好的方法”之类的问题。我尝试了多种解决方案,但没有一个符合我的要求。
- 我尝试创建嵌套路由并将
router-view放置在v-stepper-content中。下面的例子。我在这里遇到的问题是无法同步更新position(请参阅 v-stepper 元素)和路线。因此,您将始终在步骤更新之前看到路线更新。
<v-stepper v-model="position" vertical>
<template v-for="(item, index) in steps">
<v-stepper-step :complete="position > index + 1" :step="index + 1">
<h2>
{{item.title}}
</h2>
</v-stepper-step>
<v-stepper-content :step="index+1">
<router-view></router-view>
</v-stepper-content>
</template>
</v-stepper>
- 我尝试的另一个解决方案是直接异步/动态加载组件(因此无需路由器)。但是,然后我失去了使用浏览器的后退和下一步按钮浏览我的 v-stepper 的美妙能力。
根据我的经验,最大的缺陷是(与例如 v-tab 相反)是每个步骤都必须有自己的v-stepper-content。如果我要使用选项卡执行此操作,我只需创建一个 tab-item 并更新视图。我不能用v-stepper 做到这一点,因为它不会继续到下一个“步骤”。
有人有创造性的方法吗?
【问题讨论】:
-
当用户直接进入第二步/第三步时,你打算如何处理?加载哪个组件?数据从何而来?
-
提交验证需要完成所有步骤。加载哪个组件取决于 route prop。数据在组件中被硬编码。
-
有什么解决办法吗?
-
我现在使用
<component :is="">并手动将带有参数的路由推送到vue 路由器(所以你会得到?step=1、?step=2等)。但这不是真正的解决方案。
标签: javascript vue.js vue-router vuetify.js v-stepper