我不能从一个重定向到另一个页面的组件页面传递参数。我有一个确认,它执行一些验证过程并将用户重定向到登录页面。在这种情况下,我想在登录页面上显示一条消息。
我的确认页面代码使用this.$router.push
重定向。
methods: {
async confirmSignUp() {
this.$router.push({ name: 'Login page', params: {data: '1'} })
...
}
},
async created() {
await this.confirmSignUp()
}
我的路由器代码
{
// student login
path: '/login',
name: 'login',
component: () => import('layouts/student/MainLayout.vue'),
children: [
{ path: '/login', name: 'Login page', component: () => import('pages/student/LogInPage.vue')}
],
meta: { preventLoginUser: true },
props: true
},
我的登录页面代码
mounted() {
let data = this.$route
console.log('data is', data)
},
这里我只是记录了整个路由器的响应,我从params中得到了一个空对象。
fullPath: "/login"
hash: ""
href: "/login"
matched: (2) [{…}, {…}]
meta: {preventLoginUser: true}
name: "Login page"
params: {}
path: "/login"
query: {}
redirectedFrom: undefined
注意我使用的是Quasar框架
2条答案
按热度按时间chy5wohz1#
在路由器文件中,父路由和子路由使用相同的路径,请从子组件中删除
/
,否则,它将被视为根路径。请注意,这将生成路由
/login/login
。如果需要使用
/login
,请将子路由更改为hkmswyz62#
如何使用
当你想为父路由创建嵌套路由时,你只需要使用
children
键。如果你定义的是单个路由,就像在这个例子中,那么就不需要使用children键。所以在上面的例子中,你可以定义path
,name
,component
和meta
参数如下:称之为:
路由参数
我不知道你的“data”参数在你的例子中是什么意思。如果你想在路由中使用一个变量,你需要这样做:
称之为:
在调用Route --〉“Guard”之前运行函数
如果参数的目的是检查调用它的用户是否登录,那么有一个更好的解决方案。您可以在每个路由之前声明自己的逻辑,以确定路由应该如何运行。例如,对于
/login
路由,如果您希望它在用户已经登录的情况下自动重定向到/admin
路由。Vue路由器示例
为什么需要MainLayout.vue?
Layout
和Page
之间有一个显著的区别。我会从一开始就把它们放在单独的文件夹中:/layouts
和/pages
。如果
MainLayout.vue
是所有页面的全局布局,则可以将其单独包含在LogInPage.vue
中。By Vue Router
CamelCase名称
我还注意到,
name
属性始终只是一个名称,您可以稍后引用此路由。因此,您不必记住操作的URL地址,只需请求名为login
的路由。如果路由名称是Login Page
,则很难立即记住,并且您只会让事情变得更难。如果您仍然需要使用多个单词的名称,则值得考虑省略空格并使用
CamelCase
,例如loginPage
。