我正在登录,但是在登录方法获得成功之后,我正在为$router
对象推送路线并且它无法正常工作,有人可以帮助我吗?
我的代码:
doLogin(){
this.attemptLogin({...this.user}).then(function(){
this.$router.push('/')
} )
},
因此,登录方法按预期执行,但回调this.$router.push('/')
未运行
我的attemptLogin
是一个动作,它的代码如下:
export const attemptLogin = ( {commit}, user) => {
return http.post('login', {
'email': user.email,
'password': user.password
}).then(response => {
return commit(types.setToken, response.data)
}).catch( e => console.log(e))
}
答案 0 :(得分:4)
解决了,我将方法this.$router.push()
从我的代码更改为this.$router.go('/')
。
感谢大家的评论。
答案 1 :(得分:4)
您必须推送到名称或路径 试试这个:
this.$router.push({ path: '/' })
this.$router.push({ name: 'Home' })
答案 2 :(得分:3)
我对此有同样的问题。$ router.push('/')似乎不起作用,因为我没有重定向,日志中也没有错误。我没有意识到的是,我有一小块中间件正在查看是否设置了身份验证令牌。我把它放在错误的位置,所以自然它总是会掉下来。请记住,如果有的话,请查看中间件,因为它不会在router.push()
上返回错误。答案 3 :(得分:2)
我知道这个话题有点老了,但是特别是在遇到Nuxt&Vue这个问题时,我想提供一些可能对某些人有所帮助的更新。
login() {
this.$auth.loginWith('local', {
data: {
username: this.username,
password: this.password,
}
});
this.$router.push({name: 'dashboard'});
}
我的代码原本是这样的,但是我忘记确保自己使用的是Promise或Async / Await方法。
正确的代码(以我为例)如下所示:
async login() {
await this.$auth.loginWith('local', {
data: {
username: this.username,
password: this.password,
}
});
this.$router.push({name: 'dashboard'});
}
正如我所说,如果需要,可以使用.then()
等。但是我不想不把它扔给任何可能需要它的人。我的菜鸟错误。
答案 4 :(得分:2)
我不太喜欢$ router.go方法,因为它正在完全刷新页面。
在我的情况下,它不起作用的原因是因为在更新状态之前,我试图将$ router.push到受保护的路由。 *更具体地说,我依赖Firebase的onAuthStateChanged来更新状态,并且在无法控制此操作之前,我尝试尝试$ router.push。 *
建议:
推送到诸如“ index”之类的不受保护的路由,并使您的组件根据状态值进行响应。 (不是最好的方法)
希望有帮助。干杯
答案 5 :(得分:1)
就我而言,我发现我的beforeRouteUpdate
未执行next()
方法
坏:
beforeRouteUpdate(to, from, next) {
/*
something...
*/
}
好:
beforeRouteUpdate(to, from, next) {
/*
something...
*/
next() // DO IT!
}
答案 6 :(得分:0)
我有同样的问题。确保在路由器中设置mode: 'history'
答案 7 :(得分:0)
实际上,您可以使用以下代码在 Nuxtjs 中更改路由。
this.$router.push("/");
or
this.$router.push({ path: '/'} );
假设,如果您现在查看此链接“http://localhost:3000”或“http://192.168.0.102:300”并尝试通过使用给定代码推送“/”来更改路由。所以它不会工作。因为,您已经查看了这条路线。所以,Nuxtjs 路由不能改变。
为了处理这种情况,您可以在方法中使用以下技术/代码:
vuejs 方式:
if($route.path == '/') {
//following 2 line code are sample code here put your need codes
this.isLogin = false;
this.user_full_name = 'My Account';
} else {
// this.$router.push("/");
this.$router.push({ path: '/'} );
}
==============================================>
nuxtjs 方式:
if($nuxt.$route.path == '/') {
//following 2 line code are sample code here put your need codes
this.isLogin = false;
this.user_full_name = 'My Account';
} else {
// this.$router.push("/");
this.$router.push({ path: '/'} );
}
答案 8 :(得分:-1)
之前:
doLogin(){
this.attemptLogin({...this.user})
.then(function(){
this.$router.push('/')
} )
},
之后:
doLogin(){
this.attemptLogin({...this.user})
.then(() => {
this.$router.push('/')
} )
},
答案 9 :(得分:-4)
使用$nuxt.$router.push
代替this.$router.push