Fra*_*ank 10 javascript vue.js vue-router vuetify.js v-stepper
我想将 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>
Run Code Online (Sandbox Code Playgroud)
根据我的经验,最大的陷阱是(与 v-tab 相反),每一步都必须有自己的v-stepper-content. 如果我用选项卡来做这件事,我只会创建一个tab-item并更新视图。我不能这样做v-stepper,因为它不会继续下一步“步骤”。
有人会有创造性的方法吗?
小智 7
我能够通过执行以下操作来实现这一目标:
<v-stepper-step @click="goToRoute('step1')">
Run Code Online (Sandbox Code Playgroud)
和
goToRoute(name) {
this.$router.push({'name': name})
}
Run Code Online (Sandbox Code Playgroud)
你应该能够做到这一点:
<v-stepper-step @click="$router.push({'name': name})">
Run Code Online (Sandbox Code Playgroud)
作为@tmfmaynard 的附加答案,为了在页面刷新后将正确突出显示的步进器与当前路线对齐,这里是代码。
<v-stepper v-model="e1" alt-labels non-linear>
<v-stepper-header class="elevation-0">
<v-stepper-step
step="1"
class="caption"
editable
@click="$router.push({name: 'name'}).catch(err => {})"
>
</v-stepper-step>
</v-stepper-header>
<v-stepper-items>
<v-stepper-content step="1">
<router-view />
</v-stepper-content>
</v-stepper-items>
</v-stepper>
<script>
export default {
data () {
return {
e1: 1
}
},
created() {
this.getStepper()
},
methods: {
getStepper() {
const path = this.$route.path.split('/')
if(path[path.length-1].toLowerCase() === 'your-router-path') {
this.e1 = 1
// this.e1 = 1 = <v-stepper-step step="1" />
// this.e1 = 2 = <v-stepper-step step="2" />
// and so on.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)