And*_*yar 3 javascript vue.js vuex vuejs2
我正在尝试在我的 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>
Run Code Online (Sandbox Code Playgroud)
这是导入的功能。选择限制组件变量:
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'}]}
};
Run Code Online (Sandbox Code Playgroud)
selectLimitComponentGetters:
export const selectLimitComponentGetters = function(namespace, prefix){
return {
[`${namespace}/${prefix}selected_limit`]: state => state[`${prefix}selected_limit`]
}
};
Run Code Online (Sandbox Code Playgroud)
selectLimitComponentMutations:
export const selectLimitComponentMutations = function (namespace, prefix){
return {
[`${namespace}/update${prefix}selected_limit`]: (state, newLimit) => state[`${prefix}selected_limit`] = newLimit
}
};
Run Code Online (Sandbox Code Playgroud)
在创建 vuex 存储后,有没有办法手动添加或注册新的 getter/mutations?
最好使用store.registerModulevuex 的特性动态添加新模块到 vuex
this.$store.registerModule(`${this.ns}selected_limit`, {
state: selectLimitComponentVariables...,
getters: selectLimitComponentGetters...,
mutations: selectLimitComponentMutations...,
namespaced: true
})
Run Code Online (Sandbox Code Playgroud)
您可以在https://vuex.vuejs.org/en/modules.htmlDynamic Module Registration部分查看官方文档
| 归档时间: |
|
| 查看次数: |
2671 次 |
| 最近记录: |