当前位置:首页 > uni-app

uniapp数据字典

2026-02-06 11:13:28uni-app

数据字典的实现方法

在UniApp中实现数据字典功能,可以通过以下几种方式:

全局挂载字典数据 将字典数据挂载到Vue原型上,方便全局调用

// main.js
Vue.prototype.$dict = {
  gender: [
    { label: '男', value: 1 },
    { label: '女', value: 2 }
  ]
}

使用Vuex管理字典 创建专门的字典模块进行集中管理

// store/modules/dict.js
export default {
  state: {
    gender: [
      { label: '男', value: 1 },
      { label: '女', value: 2 }
    ]
  },
  getters: {
    getDict: (state) => (key) => {
      return state[key] || []
    }
  }
}

本地存储字典数据 将字典数据缓存到本地存储中

uni.setStorageSync('dict_gender', [
  { label: '男', value: 1 },
  { label: '女', value: 2 }
])

字典数据的使用示例

模板中使用字典

<view v-for="item in $dict.gender" :key="item.value">
  {{item.label}}
</view>

脚本中使用字典

uniapp数据字典

const genderOptions = this.$dict.gender
const selectedLabel = genderOptions.find(item => item.value === 1).label

从Vuex获取字典

computed: {
  genderOptions() {
    return this.$store.getters.getDict('gender')
  }
}

字典工具函数封装

创建字典工具类

// utils/dict.js
export default {
  // 获取字典标签
  getLabel(dictKey, value) {
    const dict = this.getDict(dictKey)
    const item = dict.find(item => item.value === value)
    return item ? item.label : ''
  },

  // 获取完整字典
  getDict(dictKey) {
    return uni.getStorageSync(`dict_${dictKey}`) || []
  }
}

使用字典工具

uniapp数据字典

import dict from '@/utils/dict.js'
const label = dict.getLabel('gender', 1)

字典数据加载策略

应用启动时加载 在App.vue的onLaunch中加载基础字典

onLaunch() {
  this.loadBaseDicts()
},
methods: {
  async loadBaseDicts() {
    const res = await uni.request({ url: '/api/dict/base' })
    res.data.forEach(item => {
      uni.setStorageSync(`dict_${item.dictKey}`, item.dictData)
    })
  }
}

按需加载字典 在需要时动态加载字典数据

async loadDict(dictKey) {
  if (!uni.getStorageSync(`dict_${dictKey}`)) {
    const res = await uni.request({ url: `/api/dict/${dictKey}` })
    uni.setStorageSync(`dict_${dictKey}`, res.data)
  }
}

字典数据格式规范

推荐使用统一的字典数据结构:

{
  dictKey: 'gender',  // 字典键名
  dictData: [         // 字典数据
    { label: '男', value: 1 },
    { label: '女', value: 2 }
  ],
  remark: '性别字典'  // 字典说明
}

对于带翻译需求的字典,可扩展为:

{
  label: '男',
  value: 1,
  enLabel: 'Male',
  jpLabel: '男性'
}

标签: 字典数据
分享给朋友:

相关文章

vue实现数据结构图

vue实现数据结构图

Vue实现数据结构图的方法 使用Vue实现数据结构图可以通过多种方式完成,具体取决于需求复杂度。以下是几种常见的方法: 使用第三方库(如D3.js或Vis.js) D3.js或Vis.js等库专门…

vue怎么实现拖动数据

vue怎么实现拖动数据

实现拖动数据的基本方法 在Vue中实现拖动数据通常使用HTML5的拖放API或第三方库如vuedraggable。以下是两种常见方法的详细说明: 使用HTML5原生拖放API HTML5提供了dr…

uniapp 广播数据

uniapp 广播数据

使用全局事件总线进行广播 在uniapp中,可以通过全局事件总线(EventBus)实现数据的广播和监听。创建一个全局的EventBus实例,在需要的地方触发事件和监听事件。 // 在main.j…

vue实现数据更改

vue实现数据更改

Vue 数据更改的实现方法 Vue 提供了多种方式来响应式地更改数据,以下是几种常见的方法: 直接修改数据属性 在 Vue 实例中,可以直接修改 data 对象的属性,Vue 会自动检测这些变化并…

vue实现数据排序

vue实现数据排序

Vue 实现数据排序的方法 在 Vue 中实现数据排序可以通过多种方式完成,以下是几种常见的方法: 使用计算属性排序 计算属性可以根据响应式数据动态计算并返回排序后的数组。例如,对一个数组按升序排序…

vue实现数据监听

vue实现数据监听

Vue 数据监听实现方式 Vue 提供了多种方式实现数据监听,核心机制基于响应式系统。以下是常见方法: 响应式属性(data 和 computed) 在组件选项中定义 data 返回对象,Vue…