开发者问题收集

使用 Vuex 时 $router.push() 不是函数错误

2020-02-10
1819

创建新项目后,我想将用户路由到另一个页面,以便他们可以向项目添加更多信息。

这是可行的:

createProject() {
      ProjectService.createProject(this.project)
        .then(response => {
          this.$router.push({
            name: "project-update",
            params: { id: response.data.data.id }
          });
        })
}

我想使用 vuex 来处理所有这些,但这不起作用。

createProject() {
  this.$store
    .dispatch("project/postProject", this.project)
    .then(response => {
      this.$router.push({
        name: "project-update",
        params: { id: response.data.data.id }
      });
    })
    .catch(() => {});
}

我收到的错误是: “state.projects.push 不是函数”

这是我在 Vuex 中的 postProject 操作:

  postProject({ commit, dispatch }, project) {
    return ProjectService.createProject(project)
      .then(() => {
        commit('ADD_PROJECT', project);
        const notification = {
          type: 'success',
          message: 'Your project has been created!'
        };
        dispatch('notification/add', notification, { root: true });
      })
      .catch(error => {
        const notification = {
          type: 'error',
          message: 'There was a problem creating your project: ' + error.message
        };
        dispatch('notification/add', notification, { root: true });
        throw error;
      });
  }

看起来“this”的上下文没有到达路由器或其中的推送功能。我如何访问路由器并路由到下一个页面?

2个回答

您可以做的是将您的路由器模块导入到您的 vuex 模块中,如下所示:

import {router} from "../main.js"
// or
import router from '../router'

export default {
  actions: {
    createProject () {
      this.$store
        .dispatch("project/postProject", this.project)
        .then(response => {
          router.push({
            name: "project-update",
            params: { id: response.data.data.id }
          })
        })
        .catch(() => { })
    }
  }
}
Karma Blackshaw
2020-02-10

我遇到了同样的问题,但我通过以下方式解决了:

this.$router.replace("/");

使用以下方式在 vuex 和 nuxt store 中出现问题: this.$router.push("/");

Jeel Rupapara
2022-12-17