Vue Router这个。$ router.push没有处理方法

时间:2018-05-31 17:13:48

标签: vue.js vue-router

我正在登录,但是在登录方法获得成功之后,我正在为$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))
}

10 个答案:

答案 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”之类的不受保护的路由,并使您的组件根据状态值进行响应。 (不是最好的方法)

    • 我最终使用Firebase Auth进行的操作是创建另一个操作,以提交与我的Firebase onAuthStateChanged所提交的状态相同的状态,但是自己在异步函数中进行操作。

希望有帮助。干杯

答案 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