vue2.0中ts中vuex模块化如何使用
一、store中如何配置
1.index.ts
javascript
import Vue from 'vue';
import Vuex from 'vuex';
import { UserStateType } from './modules/user'; //导入 UserStateType 类型
Vue.use(Vuex);
export interface IRootState {
user: UserStateType;
}
//创建并导出一个新的 Vuex Store 实例,该实例接受一个泛型参数 IRootState
export default new Vuex.Store<IRootState>({});
2.user.ts
javascript
import { VuexModule, Module, Mutation, Action, getModule } from 'vuex-module-decorators';
import store from '@/store';
// 定义了一个接口 UserStateType,包含了用户状态的属性和类型信息
export interface UserStateType {
token: string;
rootGroupId: number;
}
// dynamic: true:指定模块为动态加载。
// namespaced指定模块的命名空间为 true。启用命名空间后,模块的 actions、mutations 和 getters 将自动命名空间处理。
@Module({ dynamic: true, store, namespaced: true, name: 'user' })
// class User:定义了一个名为 User 的类。
// extends VuexModule:让 User 类继承自 Vuex 模块的基类 VuexModule,这是 Vuex 模块的基本要求。
// implements UserStateType:表明该类实现了 UserStateType 接口,即遵循了 UserStateType 接口所定义的属性和类型。
class user extends VuexModule implements UserStateType {
// token
public token = '';
public rootGroupId = 0; // 根节点id
//存入token
@Mutation
public SET_TOKEN(token: string) {
this.token = token;
}
//对外暴露存入token
@Action
public setToken(token: string) {
this.SET_TOKEN(token);
}
// 获取用户的token
@Action
public getToken() {
return this.token;
}
get getRootGroupId() {
return this.rootGroupId;
}
// 根节点id
@Mutation
SET_ROOT_GROUP_ID(params: number): void {
this.rootGroupId = params;
}
@Action
setRootGroupId(params: number): void {
this.context.commit('SET_ROOT_GROUP_ID', params);
}
}
// 导出 UserModule 的模块实例
export const UserModule = getModule(user);
二、如何使用vuex
javascript
import { UserModule } from '../store/modules/user';
// 用于设置UserModule 模块中的 rootGroupId 属性值。
UserModule.setRootGroupId(8);
// 用于获取 UserModule 模块中的 rootGroupId 属性值。
get sidebar() {
return UserModule.rootGroupId;
}