项目作者: weidao123

项目描述 :
简易的vuex typescript写法插件
高级语言: TypeScript
项目地址: git://github.com/weidao123/vuex-ts-class.git
创建时间: 2019-10-24T07:37:17Z
项目社区:https://github.com/weidao123/vuex-ts-class

开源协议:

下载


推荐使用这个

vuex-annotation

  • 这个更加的简洁 使用更方便

简介:

  • vuex-ts-class 是对Vuex的一层包装,使用TypeScript的语法来编写Vuex,使得开发大型应用能更好的提高代码的健壮性
  • 内置封装了基于 XMLHttpRequest 的 request 方法,并且对外提供了一些全局参数以及生命周期的设置方法 RequestContext

    使用:

  • yarn add vuex-ts-class
  1. import {Service, RequestContext} from 'vuex-ts-class'
  2. const service = new Service({
  3. state: {},
  4. actions: {},
  5. mutations: {}
  6. });
  7. //全局设置全局请求头部
  8. RequestContext.setRequestHeaders({"Content-Type": "application/json;charset=UTF-8"});
  9. //注册一个模块
  10. service.registerModule(Order);
  11. service.registerModule(UserModule);
  12. //导出vuex的实例
  13. export default service.createStore();

模块:

  1. import {MutationMethod, VuexModule, ActionMethod, Request, VuexModuleClass, request} from 'vuex-ts-class';
  2. //使用VuexModule装饰器来生成一个vuex模块 (PS: 这里一定要指明模块名称,不然上生产环境会出问题)
  3. @VuexModule({name: 'User'})
  4. export class UserModule {
  5. public name: string = 'hhh';
  6. @MutationMethod
  7. public setName(state: any, params: number): void {
  8. state.name = 'mutations setName' + params;
  9. }
  10. @ActionMethod
  11. @Request({url: '/test/url', method: 'POST'})
  12. public async getName({commit}: any, params: number): Promise<any> {
  13. const names = await this.request({params});
  14. commit('setName', names);
  15. }
  16. @ActionMethod
  17. public async getAge({commit}: any): Promise<any> {
  18. const config: RequestParams = {};
  19. const names = await request(config);
  20. }
  21. //该方法只是为了不让ts提示没this.request报错
  22. private request(params: any) {}
  23. }
  24. //通过继承VuexModuleClass 来生成一个vuex模块
  25. export class Order extends VuexModuleClass {
  26. constructor() {
  27. super();
  28. //必须调用父类的generate方法 并且传入this
  29. //(PS: 这里一定要指明模块名称,不然上生产环境会出问题)
  30. super.generate(this, "ModuleName");
  31. }
  32. //other...
  33. }