我用Vue创建了一个应用程序,带有一些不同的视图/组件。视图/组件必须按特定顺序运行(Main Page-
在学习Vue的过程中,我使用v-if指令管理导航,该指令运行良好,因为没有URL,因此我能够在每个视图/组件中实现逻辑,如
//pseudocode in each view/component
checkConditionsToMoveOn ? moveToNextPae : showErrorWithModalAndStayOnPage;
越来越专业,我实现了vue路由器,不知何故打破了我的应用程序,因为我现在能够欺骗逻辑通过一个步骤,只需手动更改网址。
我可以考虑实施一些导航保护,但随后我必须将条件移动到我的路由器/索引。js文件,我认为它不是很漂亮。
有没有解决这个问题的最佳实践?
我很感激提示,谢谢。
我也有类似的问题。
我认为最好的解决办法是把步骤放在单一路线上。这很容易处理,也很难欺骗逻辑。
但是,如果出于某些原因必须将步骤分为多个路径(每个步骤都太大,无法放入单个路径或…),您可以将步进计数器用作全局(路由器视图上方)。
我建议两种方法来设置全局值。
$router将url更改为有效步骤。更换以防止向后导航。如果步骤对此url有效,请在更改url之前处理逻辑并发出新步骤号
应用程序。vue
<template>
<router-view :step="fooStep" @changeStep=changStep />
</template>
<script>
export default {
data () {
return {
fooStep: 0
}
},
methods: {
changeStep (value) {
this.step = value
}
}
}
一些omponent.vue
<script>
export default {
name: 'Step3', /* optional */
props: ['step'],
mounted () {
/* some logic to check step is valid */
if (this.step !== 3) {
this.$router.replace(this.step > 0 ? '/step' + this.step : '/')
}
},
methods: {
submit () {
...
/* after submit data, send signal to App.vue to change step value */
this.$emit('changeStep', 4)
/* change url */
this.$router.replace('step4')
}
}
}
</script>
一些omponent.vue
<script>
export default {
name: 'Step3', /* optional */
mounted () {
/* some logic to check step is valid */
const step = this.$store.state.step
if (step !== 3) {
this.$router.replace(step > 0 ? '/step' + step : '/')
}
},
methods: {
submit () {
...
/* after submit data, store new step value in vuex */
/* change the value directly is not good */
this.$store.state.step = 4
/* change url */
this.$router.replace('step4')
}
}
}
</script>
使用Vuex跟踪步骤进度的当前状态:
state: {
step: 1
}
当用户访问任何步骤时,您将检查此状态。如果请求的步骤路由与此不匹配,您将重定向到它。要实现这一点,请使用route params定义路由:
// import store from '@/store';
{
path: '/step/:sid',
name: 'step',
component: Step,
...
现在,您可以将应用程序定向到http://localhost:8080/step/5
。变量to。params。sid
将匹配该路由中的5
。因此,在进入前的保护中,检查参数是否与商店的步骤匹配。
...
beforeEnter: (to, from, next) => {
const nextStep = parseInt(to.params.sid); // convert string param to number
if (nextStep === store.state.step) { // is this the current allowed step?
next(); // if so, it's ok
} else { // if not, direct to that step
next({ name: 'step', params: { sid: store.state.step }})
}
}
},
每当一个步骤完成时,您将增加存储步骤,然后将路由器引导到下一个步骤。
额外:
您还可以更改
if
条件以允许访问前面的步骤:
if (nextStep > 0 && nextStep <= store.state.step) {
使用vue 2、vue路由器2和vuex 2构建单页应用程序,但不更新 /src/main。js /src/路由器/索引。js /src/路由器/路由。js /src/store/index。js /src/view/index。vue /src/App。vue 我不知道代码有什么问题,
本文向大家介绍详解vue-router 命名路由和命名视图,包括了详解vue-router 命名路由和命名视图的使用技巧和注意事项,需要的朋友参考一下 说明:vue-router的几个文章中例子是连贯的,因此对哪块有疑问请翻阅按发表时间排序的其他文章。 一、概述 给路由定义不同的名字,根据名字进行匹配 给不同的router-view定义名字,router-link通过名字进行对应组件的渲染。 二、
官方路由 对于大多数单页面应用,都推荐使用官方支持的vue-router库。更多细节可以看vue-router文档。 从零开始简单的路由 如果只需要非常简单的路由而不需要引入整个路由库,可以动态渲染一个页面级的组件像这样: const NotFound = { template: '<p>Page not found</p>' } const Home = { template: '<p>home
我正在尝试在我的nginx服务器上设置vue路由器。我遇到的问题是,如果我直接在浏览器中输入url,我的路线就不起作用。 我尝试了vue路由器文档中描述的服务器配置,以及建议的堆栈溢出类似配置。我当前的nginx位置配置如下: 所做的就是将任何路径重定向到我的根组件(path:),而不是。这确实有意义,并且似乎只重定向到索引文件。我如何重定向直接链接的到路由在我的VueJS应用程序? 以下是我的v
我的任务是创建一个支持typescript的vue3应用程序,我还必须使用vuex进行状态管理,使用vue路由器进行基本路由。但我无法在此项目中使用vue cli 我目前的代码: 由于我从未在vue项目中使用过typescript 您能否向我推荐一些博客、教程,其中有人使用这些工具从头开始构建vue3应用程序,但没有vue cli? 全速行驶: 在VueJS 3.0框架上使用TypeScript编
我有一个显示多条路线的组件(步骤1、步骤2、步骤3…)一个接一个。我导航并传递属性,如 路线定义为 这很有效,直到我重新加载页面/路由,因为数据丢失。所以我有点想在加载组件后从父级获取数据。 我的一个想法是使用本地存储,但这感觉不对。 我是Vue的新手,我想问一下这里的最佳实践是什么。是否像这里描述的那样使用vue路由器重新加载组件?请给我一个提示。