javascript - 如何在 Vuex 商店创建后手动添加 getter/mutations?
问题描述
我正在尝试在我的一个 Vuejs 组件中的“已创建”生命周期挂钩中添加新变量、getter 和突变。变量工作正常。但是对于 getter/mutations,似乎并不像向 vuex 存储对象添加新函数那么容易。我要解决的问题是创建“共享”可重用组件。
这是组件:
<template>
<div>
<h2 class="headline">Number of items:</h2>
<v-select
:items="limits"
item-value="value"
item-text="text"
label="Select"
v-model="selected_limit"/>
</div>
</template>
<script>
import {selectLimitComponentVariables} from './index';
import {selectLimitComponentGetters} from './getters';
import {selectLimitComponentMutations} from './mutations';
export default {
created: function () {
// Add the variables
Object.assign(this.$store.state[this.ns], selectLimitComponentVariables(this.var_prefix));
// Add the getters
Object.assign(this.$store.getters, selectLimitComponentGetters(this.ns, this.var_prefix));
// Add the mutations
Object.assign(this.$store._mutations, selectLimitComponentMutations(this.ns, this.var_prefix));
},
name: 'SelectLimitComponent',
props: {
ns: {
type: String,
default: null
},
var_prefix: {
type: String,
default: ''
}
},
computed: {
selected_limit: {
get () {
return this.$store.state[this.ns].selected_limit;
},
set (value) {
this.$store.commit(`${this.ns}/update${this.var_prefix}selected_limit`, value)
}
},
limits: {
get() {
return this.$store.state[this.ns].limits;
}
}
}
}
</script>
这是导入的函数。选择限制组件变量:
export const selectLimitComponentVariables = function (prefix) {
return {
[`${prefix}selected_limit`]: '100',
[`${prefix}limits`]: [
{'text': '10', 'value': '10'},
{'text': '50', 'value': '50'},
{'text': '100', 'value': '100'},
{'text': '250', 'value': '250'},
{'text': 'No limit', 'value': '-1'}]}
};
选择限制组件获取器:
export const selectLimitComponentGetters = function(namespace, prefix){
return {
[`${namespace}/${prefix}selected_limit`]: state => state[`${prefix}selected_limit`]
}
};
选择限制组件突变:
export const selectLimitComponentMutations = function (namespace, prefix){
return {
[`${namespace}/update${prefix}selected_limit`]: (state, newLimit) => state[`${prefix}selected_limit`] = newLimit
}
};
在创建 vuex 存储之后,有没有办法手动添加或注册新的 getter/mutations?
解决方案
最好使用store.registerModule
vuex 的特性来动态添加新模块到 vuex
this.$store.registerModule(`${this.ns}selected_limit`, {
state: selectLimitComponentVariables...,
getters: selectLimitComponentGetters...,
mutations: selectLimitComponentMutations...,
namespaced: true
})
您可以在https://vuex.vuejs.org/en/modules.htmlDynamic Module Registration
部分查看官方文档
推荐阅读
- python - 比较来自光栅的两个数组中的值并执行操作
- java - 当我不断收到 HTTP ERROR 500 java.lang.VerifyError 时,是否可以在 App Engine 中使用 Datanucleus 增强的 Java 8 类?
- php - php guzzle 问题与对 wordsAPI 的 requestAsync 调用
- python - Python websocket客户端 - 确定连接是否打开的方法
- python - 你能在 Python 中检索函数的有效参数列表吗
- selenium - 使用 selenium 访问网站时无法与客户端建立 TLS
- blazor-webassembly - 如何从 Blazor WebAssembly 中的 sessionStorage 读取大字符串?我的结果被截断
- c++ - 如何使用支持多个文件的 arduino 创建 Web 服务器?
- sql - 查询以替换 PostgreSQL 中 int 数组中的部分值
- java - Java 程序未显示所需的输出