如何从 javascript 文件(而不是 vue 组件)调度操作?
Posted
技术标签:
【中文标题】如何从 javascript 文件(而不是 vue 组件)调度操作?【英文标题】:How to dispatch action from a javascript file (instead of a vue component)? 【发布时间】:2018-03-24 19:27:04 【问题描述】:我在 vue 上下文之外有一个模块(javascript 文件)。我需要从这个 javascript 文件中调度操作。可能吗 ?如果是,那么如何?
jsfile.js(Javascript 文件)
const detail = ;
detail.validateLocation = (location) =>
// need to dispatch one action from here.
// dispatch('SET_LOCATION', city: 'California')
// how to dispatch action ?
export default detail;
action.js
export default
SET_LOCATION: ( commit, data) =>
commit('SET_LOCATION', data);
,
store.js
import Vue from 'vue';
import Vuex from 'vuex';
import actions from './actions';
import mutations from './mutations';
import getters from './getters';
export function createStore()
return new Vuex.Store(
modules: ,
state:
location: null
,
actions,
mutations,
getters,
);
【问题讨论】:
【参考方案1】:首先,在 store.js 中创建商店。
import Vue from 'vue';
import Vuex from 'vuex';
import actions from './actions';
import mutations from './mutations';
import getters from './getters';
const store = new Vuex.Store(
modules: ,
state:
location: null
,
actions,
mutations,
getters,
);
export default store
然后,将 store 导入 jsfile.js 并使用它。
import store from "./store"
const detail = ;
detail.validateLocation = (location) =>
// Use imported store
store.dispatch('SET_LOCATION', city: 'California')
export default detail;
假设您有一个创建 Vue 实例的主文件或索引文件,您现在可能需要将导入从导入 create 函数更改为仅导入 store。
【讨论】:
我的做法是: import createStore from '../store';常量存储 = createStore(); store.dispatch('SET_LOCATION', city: 'California');但它不起作用 @MukundKumar 不要那样做。只是import store from "./store"
。您没有理由需要导出函数来创建商店。只需导入商店。如果你导出一个 create 函数并在多个文件中创建一个 store,你最终会得到多个 store。
但我将 new Vuex.Store() 包装在 createStore 函数中。所以它应该可以工作。
@MukundKumar 你想要不止一家商店吗?
对于遇到此问题的其他人-如果您使用模块,则必须导入基本存储并通过正斜杠符号引用模块,例如store.dispatch('user/markNotificationAsRead', notification);
以上是关于如何从 javascript 文件(而不是 vue 组件)调度操作?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式从文件夹中导入 Vue 组件,而不是硬编码(我实际上使用的是 Nuxt,但我将其称为 Vue)
Vue.Draggable:如何“将一个项目拖到另一个项目上”而不是添加/删除
如何引用 Vue 组件的 this 而不是 D3 的 this 实例
Vue.js - 是不是可以使用 Javascript 动态导入从另一台服务器加载组件?
如何使用 google.load 加载 javascript 文件,而不是直接使用 freemarker 模板语言中的标签?