当前位置: 首页 > 知识库问答 >
问题:

如何从导入“存储”的vue路由器路由内部提交vuex存储变异?

任宾鸿
2023-03-14

我的目标是提交(调用/调用)我在Vuex存储中定义的突变。

商店。js

export default {
  modules: {
    app: {
      state: {
        shouldDoThing: false,
      }
      mutations: {
        setShouldDoThing: (state, doThing) => { state.shouldDoThing = doThing },
      }
    }
  }
}

由于我将Vuex连接到我的应用程序,因此我可以使用此选项$百货商店在应用程序的各个组件中提交,不会出现问题。

main.js

import Store from 'store/store.js';
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);
const app = new Vue({
  el: '#app-root',
  store,
  // ...etc
});

例如:

omponent.vue

export default {
  created() {
    // This works!
    this.$store.commit('setShouldDoThing', true);
  },
}

现在,我想从vue路由器路由文件中提交一些内容,使用beforeEnter方法:

例如路线。js

import Store from 'store/store.js'

const someRoute = {
  path: '/blah',
  beforeEnter(to, from, next) {
    Store.commit('setShouldDoThing', true);
    next();
  }
}

然而,当我尝试上述方法时,我得到了错误

TypeError: _state_store__WEBPACK_IMPORTED_MODULE_10__.default.commit is not a function

网上有很多通过导入成功使用vuex getters的例子。而且,如果我console.log()导入Store,我可以看到我的整个存储结构

modules:
  app:
    actions: {someAction: ƒ, …}
    getters: {isStartingQuery: ƒ}
    mutations: {ariaAnnounce: ƒ, …}
    state: {…}
    __proto__: Object

如何从vue路由器文件中导入存储,然后提交变异?

共有1个答案

杜河
2023-03-14

我已经在谷歌上搜索了很长时间,没有找到针对这个特定案例或问题的stackoverflow答案或vue论坛答案,所以下面是我测试并在我的案例中工作的解决方案。

无论出于什么原因,我都不能触发提交。然而,我可以简单地直接调用突变,然后这种变化会反映在其他组件中(例如,没有导入“不同”的存储)。

一些oute.js

import Store from 'store/store.js'

const someRoute = {
  path: '/blah',
  beforeEnter(to, from, next) {
    Store.modules.app.mutations.setShouldDoThing(Store.modules.app.state, true);
    next();
  }
}

后来,在某些组件中:

一些omponent.vue

export default {
    beforeMount() {
      console.log(this.$store.state.app.shouldDoThing);
      // true
    }
}
 类似资料:
  • 我需要你的帮助。有一个Vue应用程序,我使用vuex商店和Vue路由器。问题是,我从API调用中获取存储数据,如果我从其他地方导航到页面,用户数据已经存储在存储中,并且在组件中,我可以使用getter接收到的数据。但是,如果我在create或mount方法中重新加载页面,则getter不包含任何数据。但如果在Vuex开发工具中查看,我可以看到fetchedd数据。如何修复此行为?

  • 我有一个带有SSR、Vue Cli、Vuex和Typescript的Vue3项目。 在路由器页面中,我需要将数据提交到Vuex存储。在一个。vue文件我只是使用这个$在vuex中键入的存储。d、 例如: 但是如何从没有this或vue实例的ts文件(router/index.ts)中执行此操作呢。 我尝试导入存储索引文件并提交: 但我犯了个错误 类型“”上不存在属性“提交”()= 存储文件(因为我

  • SOP基于spring cloud,因此会涉及到网关路由。但是开发者不用去配置文件定义路由的隐射关系,SOP帮你解决了这个问题。 获取路由信息 网关启动成后会触发一个事件,代码见:com.gitee.sop.gatewaycommon.config.AbstractConfiguration.listenEvent 这个事件会取拉取微服务中提供的路由信息 下面以nacos为例,介绍拉取路由过程 1

  • 我很难得到在商店工作的promise。 我通过一个动作调用突变,这似乎很有效。 该操作被导入到我的组件中: 然后叫: 这一切看起来都有效,但是当我检查Vue开发工具时,Vuex基本状态保持不变,并且我有一个活动突变(setPlace)。我可以点击“全部提交”来提交有效的突变。 在我的组件中,我在getter mapLocation上使用了一个监视程序,当我单击Commit All时会触发该监视程序

  • 01-20 08:55:14.787:W/System.err(1383):at libcore.io.iobridge.open(iobridge.java:409)01-20 08:55:14.787:W/System.err(1383):at java.io.fileInputStream.(fileInputstream.java:78)01-20 08:55:14.827:W/Syste