dict.js——拿来就用,有些注释,应该一看就懂,看不懂也没关系,因为人生已经很累了,对自己好点。
支持前端静态编码数据字典,不用走后端接口;同时也支持从后端接口获取字典数据,然后进行动态缓存。
有个亮点:就是第一次进行字典值获取翻译的时候才会进行缓存数据字典,后续如果查找相同的字典则不会再进行初始化缓存
还有一个优化:有时候后端传过来的是字符串类型的数字,实际上我们配置的是数字类型,调用时不需要关心这个,内部做了处理
使用方法:Dict.get(dictName, key) 就这一行就完事了。dictName字典名称,key是label/value,当为value时,支持数字及字符串双类型。如果说我要走接口,那么使用Dict.set(dictName, source)进行缓存即可。
const Dict = {
/***********************************静态指定字典数组开始*********************************/
// 公共的是与否字典
yesOrNo: [
{ label: '是', value: 1 },
{ label: '否', value: 0 },
],
/***********************************静态指定字典数组结束*********************************/
// 字典缓存Map
cacheDictMap: new Map(),
/**
*
* @param dictName 字典名称
* @param key label/value,当为value时,支持数字及字符串双类型
* @returns {null|*} 对应的value/label
*/
get: (dictName, key) => {
if (Dict[dictName] == undefined) {
return null;
}
if (Dict.cacheDictMap.get(dictName) == undefined) {
let dictFunc = Dict.createDict(Dict[dictName]);
if (dictFunc) {
Dict.cacheDictMap.set(dictName, dictFunc);
} else {
return null;
}
}
return Dict.cacheDictMap.get(dictName)(key);
},
/**
*动态增加字典
* @param dictName 字典名称
* @param source 字典数组。示例:[{ label: '否', value: 0 }]
*/
set: (dictName = '', source = []) => {
if (dictName && source) {
Dict[dictName] = source;
}
},
/**
* 生成一个字典数据结构对象
* @param source 字典数组。示例:[{ label: '否', value: 0 }]
* @returns {(function(*): (*|null))|*} 根据key/value返回对应的值/名称的方法
*/
createDict: (source) => {
const enumMap = new Map();
source.map((item) => {
enumMap.set(item.label, item.value);
enumMap.set(Number(item.value), item.label);
enumMap.set(String(item.value), item.label);
});
return (key) => {
if (key !== undefined) {
if (enumMap.get(key) != undefined) {
return enumMap.get(key);
}
}
return null;
};
},
};
使用示例:
let yesOrNo = [
{ label: '是', value: 1 },
{ label: '否', value: 0 },
];
// 动态缓存
Dict.set('yesOrNo', yesOrNo);
// 根据数字value获取标签:否
let result1 = Dict.get('yesOrNo', 0);
// 根据字符串value获取标签:否
let result2 = Dict.get('yesOrNo', '0');
// 根据label获取value:1
let result3 = Dict.get('yesOrNo', '是');