如何从 javascript/typescript 模块文件(导入/导出)访问 Vuex 商店?
Posted
技术标签:
【中文标题】如何从 javascript/typescript 模块文件(导入/导出)访问 Vuex 商店?【英文标题】:How to access Vuex store from javascript/typescript modules files (import/export)? 【发布时间】:2019-03-05 02:14:13 【问题描述】:我有一个vue
应用程序。
如何从 javascript/typescript 模块文件(导入/导出)访问商店?
例如,我创建了导出状态、操作、突变的 auth-module。
export const auth =
namespaced: true,
state,
actions,
mutations,
getters,
;
在我的应用中,我将模块导入到我的商店:
Vue.use(Vuex);
export const store = new Vuex.Store(
modules:
auth,
);
现在,我想为我的 http 调用创建拦截器(在我的 auth 模块中)以从商店添加令牌。
Vue.http.interceptors.push((request: any) =>
// ---> store.state.token???
// request.headers.set('Authorization', 'Bearer TOKEN');
);
但是我怎样才能在不依赖我的应用的情况下访问商店的状态呢?
import store from './store'
但可以从 vue
或 vuex
模块导入 store 实例。
【问题讨论】:
【参考方案1】:您可以使用插件来做到这一点。
-
当您使用插件时,您将获得商店实例。
订阅实例并获取状态,从状态中提取令牌并将其保存到局部变量。
在拦截器中读取此模块全局变量。
这是我为您构建的解决方案:
StoreTokenInterceptorPlugin.ts
import Vue from 'vue';
import VueResource from 'vue-resource';
import get from 'lodash';
Vue.use(VueResource);
export const StoreTokenInterceptorPlugin = (store: any) =>
let token: string | null = null;
(Vue.http.interceptors as any).push((request: any) =>
if (token && !request.headers.get('Authorization'))
request.headers.set('Authorization', `Bearer $token`);
);
store.subscribe((mutation: any, state: any) =>
token = get(state, 'auth.token') || null;
);
;
在您的应用商店中:
import Vue from 'vue';
import Vuex from 'vuex';
import auth, StoreTokenInterceptorPlugin from '@modules/auth';
Vue.use(Vuex);
export const store = new Vuex.Store(
state,
modules:
auth,
as any,
....
plugins: [StoreTokenInterceptorPlugin],
);
【讨论】:
以上是关于如何从 javascript/typescript 模块文件(导入/导出)访问 Vuex 商店?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript/TypeScript 中创建具有非唯一键的地图?
Javascript/Typescript 中类的交叉引用如何工作?
如何通过 javascript/typescript 获取“事件”对象的特定元素
如何等待 JavaScript/TypeScript 中的 Promise 列表?
如何在单独的非 Vue 组件、JavaScript/TypeScript 文件中访问 Vuex 状态?
如何在 javascript/typescript 事件回调中访问它,同时保留 removeEventListener 的能力? [复制]