如何从 Vuex 状态使用 Vue Router?

2024-06-23

在我的组件中我一直在使用:

this.$router.push({ name: 'home', params: { id: this.searchText }});

要改变路线。我现在已经将一个方法移入我的 Vuex 操作中,当然this.$router不再有效。也没有Vue.router。那么,如何从 Vuex 状态调用路由器方法呢?


我假设vuex 路由器同步 https://github.com/vuejs/vuex-router-sync在这里没有帮助,因为您需要路由器实例。

因此,虽然这感觉不太理想,但您可以将实例设置为 webpack 中的全局实例,即

global.router = new VueRouter({
  routes
})

const app = new Vue({
  router
  ...

现在您应该能够:router.push({ name: 'home', params: { id: 1234 }})从应用程序中的任何位置


作为替代方案,如果您不喜欢上述想法,您可以从您的操作中返回一个 Promise。然后,如果操作成功完成,我假设它调用了突变或其他东西,你可以resolve承诺。然而,如果它失败了,无论重定向需要什么条件,你都会遇到reject承诺。

通过这种方式,您可以将路由器重定向移动到一个组件中,该组件只需捕获被拒绝的 Promise 并触发 vue-router 推送,即

# vuex
actions: {
  foo: ({ commit }, payload) =>
    new Promise((resolve, reject) => {
      if (payload.title) {
        commit('updateTitle', payload.title)
        resolve()
      } else {
        reject()
      }
    })

# component
methods: {
  updateFoo () {
    this.$store.dispatch('foo', {})
      .then(response => { // success })
      .catch(response => {
        // fail
        this.$router.push({ name: 'home', params: { id: 1234 }})
      })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Vuex 状态使用 Vue Router? 的相关文章

随机推荐

  • 由于精度原因,SQL 结果列显示没有值?

    这是 PostgreSQL 中的一个查询 SELECT 25 8175133 结果显示 0 而实际值为 0 00000305805 I tried SELECT CAST 25 8175133 AS DECIMAL SELECT CAST
  • 软件中断和信号的区别

    软件中断是使用信号传递的 这是否总是正确的 如果不是的话 a 两者有什么区别 如果是 除了传递信号之外 是否还有其他机制可以引发软件中断 该引用的作者似乎在非常普遍的意义上使用 软件中断 即 任何导致程序偏离其通常操作流程且并非源自硬件的事
  • 如何使用 lambda 表达式查询嵌套列表

    在我的存储库实现中 我可以使用 lambda 表达式运行以下查询 public IList
  • 单元测试实时/并发软件[重复]

    这个问题在这里已经有答案了 可能的重复 我应该如何对线程代码进行单元测试 https stackoverflow com questions 12159 how should i unit test threaded code 经典的单元测
  • 如何使用 PHP 验证正则表达式

    我希望能够验证用户输入的正则表达式 以检查它是否有效 我在 PHP 中发现的第一件事filter var http php net manual en function filter var php与FILTER VALIDATE REGE
  • 带下划线的 MySQL LIKE 查询

    我有下表images id img path 1 abc 1 jpg 2 abc 2 jpg 3 abcde 1 jpg 4 abcde 2 jpg 5 abcdef 1 jpg 我想选择以下条目img path以 开始abc 所以我使用以
  • 如何限制php脚本的传出响应速度?

    如何限制php脚本的传出响应速度 所以我有一个脚本在保持活动连接中生成数据 它只是打开文件并读取它 如何限制传出速度 现在我有这样的代码 if isset GET FILE fileName GET FILE file fileName i
  • 哪种 git commit 实践更好?

    我坚信 对一个问题做出一次承诺是一种很好的做法 我确信我在 最佳实践 之类的文章中读过它 因此 我的工作流程如下 对于新问题 我创建了一个新的本地分支git checkout b new issue 将所有更改提交到其中 有时这涉及到lot
  • MySQL INSERT 语句在大表中是否会变慢?

    我可以看到如何SELECT and UPDATE随着表的不断增长 语句会变得越来越慢 但是呢INSERT INSERT也会变慢 特别是如果你有很多indexes也必须更新 但不同的存储引擎之间存在差异 MyISAM对于很多人来说更快SELE
  • 更改 Woocommerce 电子邮件表总计中的“运费”标签?

    我正在 WooCommerce 中自定义订单电子邮件模板 需要将 送货 标题更改为 送货 并将 送货地址 更改为 送货地址 我尝试了一个插件 Say What 来更改文本 但它不起作用 有一个循环可以处理所有这些信息 Woocommerce
  • Google 表格脚本 - onEdit 和“源”

    我已经努力了几天 试图让脚本发挥作用 在最基本的层面上 我的函数包含以下内容 function onEdit e var changedRange e source getActiveRange 根据谷歌的文档 这似乎是完全合法的用途 ht
  • 重载解析查看命名空间

    以下代码按预期失败 因为没有重载get被发现 使用std get会解决问题 include
  • 如果没有找到记录则返回零

    我在存储过程中有一个查询 该查询对表中的一些值进行求和 SELECT SUM columnA FROM my table WHERE columnB 1 INTO res 在此选择之后我减去res值与另一个查询检索到的整数并返回结果 如果W
  • 为什么 constexpr 函数中有“从不使用非文字类型”规则?

    采取以下法律代码 bool bar template
  • 解析express应用程序中的url哈希片段

    我正在编写一个快速应用程序 我必须使用 oauth 2 0 流程对用户进行身份验证 我已成功将用户重定向到 oauth 提供程序 并且提供程序在 oauth 回调中发送访问令牌 就像是 http localhost 4000 oauth c
  • 使用 Firebase 进行二维码身份验证

    我想实现类似 WhatsApp Web 的身份验证 用户应该使用移动应用程序扫描二维码以使用 Firebase 登录到 Web 应用程序 并且我希望通过基于电子邮件和密码的身份验证注册的用户来实现此目的 我赢得了不使用 FB 或 G 登录
  • 如何禁用 jQuery UI 对话框上的按钮?

    如何禁用按钮在 jQuery UI 对话框上 http jqueryui com demos dialog modal confirmation 我似乎无法在上面链接的任何文档中找到这一点 我有两个模式确认按钮 确认 和 取消 在某些情况下
  • 在嵌套 json 对象中查找并更新,而不更改不同子路径中相同的密钥对值

    这是我之前问题的更新在嵌套 json 对象中查找并更新 https stackoverflow com questions 17988939 find and update in nested json object 17991517 样本
  • 如何从redis中的哈希中获取与特定模式匹配的所有键?

    我想从哈希中获取所有键及其值 其中键与特定模式匹配 我将 Redis 与 C 库 ServiceStack Redis 结合使用 我找到了命令Keys with a pattern http redis io commands keys h
  • 如何从 Vuex 状态使用 Vue Router?

    在我的组件中我一直在使用 this router push name home params id this searchText 要改变路线 我现在已经将一个方法移入我的 Vuex 操作中 当然this router不再有效 也没有Vue