构造字典插件

本文探讨了在项目中处理大量基础数据配置时,如何利用字典来提高效率。通过创建一个全局字典插件,实现了根据key值便捷获取数据的功能,避免了写死数据或频繁调接口的弊端。在组件创建阶段,批量获取字典数据并使用Vue.set进行属性设置,优化了数据获取和使用流程。
摘要由CSDN通过智能技术生成

当项目庞大时,我们不得不面临巨大的基础数据配置问题,无论写死还是单独调接口都不算最优选择,这个时候字典就诞生了。
字如其名,字典的作用就是根据一个key值去获取基础数据,就像小学生查字典一样简单

const install = function (Vue) {
	//全局汇入插入字典数据,这里会将页面的每个组件都插入该数据,当页面组件庞大时,会多次执行,待优化。
	Vue.mixin({
		data() {
			//this.$options可以获取data同级的自定义属性,比如我们使用的dict属性
			if (Array.isArray(this.$options.dicts) && this.$options.dicts.length > 0) {
				//若匹配到dict属性,并是数组且长度大于1,表示调用了字典插件, 加上对应方法。
				const dict = {
					getValue: this.getDictValue,
					getLabel: this.getDictLabel,
				}
				return {
					dict
				}
			}
			return {}
		},
		created() {
			if (Array.isArray(this.$options.dicts) && this.$options.dicts.length > 0) {
			//此处为获取字典的数据接口,这里很多人喜欢将获取字典数据个例化:每次获取一个字典,进行多次获取。我觉得综合下来一次批量获取获取更为优化。
				getDictName(this.$options.dicts).then(res => {
					//数据结构为 {dict1:[{value:'1', label: '类型1'}], dict2:[{value:'1', label: '类型1'}]
					Object.keys(res.data).forEach(key => {
						let value = res.data[key]
						//此处只能使用Vue.set进行属性设置
						Vue.set(this.dict, key, value)
					});
				})
			}
		},
		methods: {
			getDictValue(dictName, label) {
				let dictArr = this.dict[dictName]
				if (Array.isArray(dictArr) && dictArr.length > 0) {
					return dictArr.filter(item => item.label === label)[0].label
				} else {
					console.error('未匹配到对应字典的label值')
					return ''
				}
			},
			getDictLabel(dictName, value) {
				let dictArr = this.dict[dictName]
				if (Array.isArray(dictArr) && dictArr.length > 0) {
					return dictArr.filter(item => item.value === value)[0].value
				} else {
					console.error('未匹配到对应字典的value值')
					return ''
				}
			}
		}
	})
}
export default {
	install
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值