Skip to content

Commit 109e1a4

Browse files
author
anthinkingcoder
committed
新增mixin函数简化loading相关操作生成
1 parent 9567af0 commit 109e1a4

File tree

3 files changed

+147
-28
lines changed

3 files changed

+147
-28
lines changed

index.js

Lines changed: 66 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
/**
2+
* 自动为绑定loading的state属性生成loading的相关操作方法
3+
* @param state
4+
* @param getters
5+
* @param mutations
6+
* @param stateNameArray 要绑定loading的state属性数组
7+
*/
8+
function mixin({state, getters, mutations}, stateNameArray = []) {
9+
stateNameArray.forEach(name => {
10+
let loadingName;
11+
if (typeof name === 'object') {
12+
let stateName = Object.keys(name)[0]
13+
if (Array.isArray(stateName) && !name[stateName]) {
14+
throw new Error('When multiple state share a loading, the loading name not be null')
15+
}
16+
loadingName = name[stateName]
17+
} else {
18+
loadingName = normalizeLoadingName(name)
19+
}
20+
if (loadingName) {
21+
state[loadingName] = false
22+
getters[loadingName] = getLoadingGetter(loadingName)
23+
mutations[normalizeMutationName(loadingName)] = getLoadingMutation(loadingName)
24+
}
25+
})
26+
}
27+
128
/**
229
* 生成loading action
330
* @param commit
@@ -41,36 +68,56 @@ function mapLoadingState(stateObj, totalLoadingName) {
4168
}
4269

4370
/**
44-
* 生成loading mutation
71+
* 生成loading mutation集合
4572
* @param nameArray mutation name数组
4673
* @returns {Array} 返回mutation方法数组
4774
*/
48-
function mapLoadingMutation(nameArray = []) {
75+
function mapLoadingMutations(nameArray = []) {
4976
let res = {}
5077
nameArray.forEach(name => {
5178
let fnName = normalizeMutationName(name)
52-
res[fnName] = (state, loading) => {
53-
state[name] = loading
54-
}
79+
res[fnName] = getLoadingMutation(name)
5580
})
5681
return res
5782
}
5883

84+
5985
/**
60-
* 生成loading getters
86+
* 生成loading getters集合
6187
* @param nameArray loading state name array
62-
* @returns {{}}
88+
* @returns {{}} 返回getters方法数组
6389
*/
64-
function mapLoadingGetter(nameArray = []) {
90+
function mapLoadingGetters(nameArray = []) {
6591
let res = {}
6692
normalizeMap(nameArray).forEach(item => {
67-
res[item['key']] = (state) => {
68-
return state[item['val']]
69-
}
93+
res[item['key']] = getLoadingGetter(item['val'])
7094
})
7195
return res
7296
}
7397

98+
/**
99+
* 生成一个loading mutation
100+
* @param name state的属性名称
101+
* @returns {function(*, *)}
102+
*/
103+
function getLoadingMutation(name) {
104+
return (state, loading) => {
105+
state[name] = loading
106+
}
107+
}
108+
109+
110+
/**
111+
* 生成一个loading getter
112+
* @param val state的属性名称
113+
* @returns {function(*, *)}
114+
*/
115+
function getLoadingGetter(val) {
116+
return (state) => {
117+
return state[val]
118+
}
119+
}
120+
74121
/**
75122
* 初始化变更函数名 loading -> setLoading
76123
* @param name
@@ -119,9 +166,15 @@ function pointer(commit, loading, fn) {
119166
}
120167
}
121168

169+
170+
export default {
171+
mixin,
172+
aopLoading
173+
}
122174
export {
175+
mixin,
123176
aopLoading,
124-
mapLoadingMutation,
177+
mapLoadingMutations,
125178
mapLoadingState,
126-
mapLoadingGetter
179+
mapLoadingGetters
127180
}

lib/vuex-loading.js

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,44 @@
22

33
Object.defineProperty(exports, '__esModule', { value: true });
44

5+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
6+
return typeof obj;
7+
} : function (obj) {
8+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
9+
};
10+
11+
/**
12+
* 自动为绑定loading的state属性生成loading的相关操作方法
13+
* @param state
14+
* @param getters
15+
* @param mutations
16+
* @param stateNameArray 要绑定loading的state属性数组
17+
*/
18+
function mixin(_ref) {
19+
var state = _ref.state,
20+
getters = _ref.getters,
21+
mutations = _ref.mutations;
22+
var stateNameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
23+
24+
stateNameArray.forEach(function (name) {
25+
var loadingName = void 0;
26+
if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
27+
var stateName = Object.keys(name)[0];
28+
if (Array.isArray(stateName) && !name[stateName]) {
29+
throw new Error('When multiple state share a loading, the loading name not be null');
30+
}
31+
loadingName = name[stateName];
32+
} else {
33+
loadingName = normalizeLoadingName(name);
34+
}
35+
if (loadingName) {
36+
state[loadingName] = false;
37+
getters[loadingName] = getLoadingGetter(loadingName);
38+
mutations[normalizeMutationName(loadingName)] = getLoadingMutation(loadingName);
39+
}
40+
});
41+
}
42+
543
/**
644
* 生成loading action
745
* @param commit
@@ -58,40 +96,58 @@ function mapLoadingState(stateObj, totalLoadingName) {
5896
}
5997

6098
/**
61-
* 生成loading mutation
99+
* 生成loading mutation集合
62100
* @param nameArray mutation name数组
63101
* @returns {Array} 返回mutation方法数组
64102
*/
65-
function mapLoadingMutation() {
103+
function mapLoadingMutations() {
66104
var nameArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
67105

68106
var res = {};
69107
nameArray.forEach(function (name) {
70108
var fnName = normalizeMutationName(name);
71-
res[fnName] = function (state, loading) {
72-
state[name] = loading;
73-
};
109+
res[fnName] = getLoadingMutation(name);
74110
});
75111
return res;
76112
}
77113

78114
/**
79-
* 生成loading getters
115+
* 生成loading getters集合
80116
* @param nameArray loading state name array
81-
* @returns {{}}
117+
* @returns {{}} 返回getters方法数组
82118
*/
83-
function mapLoadingGetter() {
119+
function mapLoadingGetters() {
84120
var nameArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
85121

86122
var res = {};
87123
normalizeMap(nameArray).forEach(function (item) {
88-
res[item['key']] = function (state) {
89-
return state[item['val']];
90-
};
124+
res[item['key']] = getLoadingGetter(item['val']);
91125
});
92126
return res;
93127
}
94128

129+
/**
130+
* 生成一个loading mutation
131+
* @param name state的属性名称
132+
* @returns {function(*, *)}
133+
*/
134+
function getLoadingMutation(name) {
135+
return function (state, loading) {
136+
state[name] = loading;
137+
};
138+
}
139+
140+
/**
141+
* 生成一个loading getter
142+
* @param val state的属性名称
143+
* @returns {function(*, *)}
144+
*/
145+
function getLoadingGetter(val) {
146+
return function (state) {
147+
return state[val];
148+
};
149+
}
150+
95151
/**
96152
* 初始化变更函数名 loading -> setLoading
97153
* @param name
@@ -146,7 +202,14 @@ function pointer(commit, loading, fn) {
146202
};
147203
}
148204

205+
var index = {
206+
mixin: mixin,
207+
aopLoading: aopLoading
208+
};
209+
210+
exports.default = index;
211+
exports.mixin = mixin;
149212
exports.aopLoading = aopLoading;
150-
exports.mapLoadingMutation = mapLoadingMutation;
213+
exports.mapLoadingMutations = mapLoadingMutations;
151214
exports.mapLoadingState = mapLoadingState;
152-
exports.mapLoadingGetter = mapLoadingGetter;
215+
exports.mapLoadingGetters = mapLoadingGetters;

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "vuex-loading",
33
"version": "1.0.0",
44
"description": "",
5-
"main": "index.js",
5+
"main": "lib/vuex-loading.js",
66
"scripts": {
77
"build": "rollup -c rollup.config.js",
88
"test": "echo \"Error: no test specified\" && exit 1"
@@ -11,7 +11,10 @@
1111
"type": "git",
1212
"url": "git+https://github.com/anthinkingcoder/vuex-loading.git"
1313
},
14-
"keywords": [],
14+
"keywords": [
15+
"vue",
16+
"vuex"
17+
],
1518
"author": "anthinkingcoder jojo837769723@gmail.com",
1619
"license": "ISC",
1720
"bugs": {

0 commit comments

Comments
 (0)