首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vuex模块装饰器中创建可重用的getter

在vuex模块装饰器中创建可重用的getter
EN

Stack Overflow用户
提问于 2019-11-20 16:00:31
回答 2查看 1.5K关注 0票数 2

在使用vuex模块装饰器时遇到了这样的问题。我想创建一些父模块,这样子模块就可以从它扩展并继承它的action和getter。但是getter不是继承的。

我试过这样做:

我的parent-module.ts

代码语言:javascript
复制
import {Action, getModule, Module, Mutation, VuexModule} from 'vuex-module-decorators';

export class ParentStore extends VuexModule {
    public get getterForInherit(): any {
        return someData
    }
}

子模块:child-one.ts

代码语言:javascript
复制
import {Action, getModule, Module, Mutation, VuexModule} from 'vuex-module-decorators'
import {ParentModule} from './parent-module';

@Module({dynamic: true, store: Store, name: 'childOne', namespaced: true})
class FirstChildModule extends ParentModule {
    public get SecondChildGetter(): number {
        return 1;
    }
}

export const FirstChildStore: ParentModule = getModule(FirstChildModule)

child-two.ts

代码语言:javascript
复制
import {Action, getModule, Module, Mutation, VuexModule} from 'vuex-module-decorators'
import {ParentModule} from './parent-module';

@Module({dynamic: true, store: Store, name: 'childTwo', namespaced: true})
class SecondChildModule extends ParentModule {
    public get FirstChildGetter(): number {
        return 2;
    }
}

export const SecondChildStore: ParentModule = getModule(SecondChildModule)

但是当我将这些模块导入组件时,getterForInherit是不可用的。可以这样做吗?

EN

回答 2

Stack Overflow用户

发布于 2019-11-20 16:22:26

我认为不要尝试使用不同的包来处理您的突变、操作和getter;根据您的问题,我假设您希望能够从父组件或子组件访问您的getter和操作。如果您已经安装了vuex,则可以使用它。

你可以这样做:

代码语言:javascript
复制
import { mapGetters, mapActions, mapMutations } from 'vuex'
methods: {
...mapActions(['submitTransaction', 'submitNotification']),
...mapMutations(['clearNotificationData']),
},
computed: {
...mapGetters([
  'messageData',
  'isMessageLoaded',
  'isProcessingRequest',
]),
票数 0
EN

Stack Overflow用户

发布于 2020-09-17 21:55:47

我也遇到了同样的问题,并找到了"vuex-class-modules“包的解决方案。它有类似的装饰器。

代码语言:javascript
复制
export class LoadItems extends VuexModule {
    public items = [];
    
    @Mutation
    public SET_ITEMS(...
    
    @Action
    public getItems() {
        this.SET_ITEMS(['hello', 'world'])
    }

在您的孩子中扩展这个类之后:

代码语言:javascript
复制
@Module
class Contract extends LoadItems {
   // your additional code here
}
export const ContractModule = new Contract({ store, name: "contract" });

现在,您可以使用命令获取任何语句和调用任何操作:

代码语言:javascript
复制
ContractModule.getItems();

当然,您必须在此之前导入它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58949347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档