Vue3使用hooks解决字典数据的显示问题

 更新时间:2024年12月09日 08:37:50   作者:A黄俊辉A  
我们在使用 element-plus的时候,经常会使用一些字典数据, 在搜索框的时候,字典数数要使用 el-select el-option 来显示,但是经常会遇到字典数据的显示问题,所以本文给大家介绍了Vue3使用hooks解决字典数据的显示问题,需要的朋友可以参考下

我们在使用 element-plus的时候,经常会使用一些字典数据, 在搜索框的时候,字典数数要使用 el-select el-option 来显示,当在table表格的时候,我们通常记录的是 字典数据的id , 又要把它改变成 字典数据的 name 属性

因为上面的位置有很多表都会使用的, 所以我们在 vue3 中最好是写一个公共的方法, 每个页面都可以随意使用, 这里, 我们就想到了使用 vue3中的 hooks

我们的字典的数据格式如下

hooks 文件的代码如下:

import { getDictData } from '../../src/api/app'   //这里是字典列表的请求接口
import {ref,onMounted} from 'vue'

export default function(){
    const dictDataCanUse = ref([]);   //注意, 这里要定义成响应式的数据,其它页才可以用,

	//getDictDataFun 接收两个参数,也可能是一个参数, 如果是只接收一个参数, 说明是要获取字典列表,给 el-select el-option 等来使用的,如果是两个参数, 则说明是给 table-column中的显示数据名称来使用的
    const getDictDataFun = (str,value = "")=>{  //注意这个地方不能使用 async 和 await ,因为这个函数是要导出去给 模板使用的, 而如果加了 async ,则返回的是一个 promise 函数, 页面中用不了
        let label = ref("");     
        if(Object.keys(dictDataCanUse.value).length == 0 || dictDataCanUse.value[str] == undefined){  第一次请求的时候 是没有值的
            dictDataCanUse.value[str] = [];  这里我们先的把数据赋成空数组,  不然后面的dictDataCanUse.value[str].find 这句会报错
            let res =  getDictData({  
                type: str
            }).then(res=>{
                dictDataCanUse.value = res;  //这里我们请求并更改了 dictDataCanUse
            })
        }
        if(value){ //如果有value ,我们得到label来返回数据
            let labelitem = dictDataCanUse.value[str].find(item=>{
                return item.id == value
            })
            label.value = labelitem.name?labelitem.name:"";
        }
		// 如果 value 不为空,则返回 label ,如果为空, 则返回字典数据
        return value ? label : dictDataCanUse.value[str];
    }
    return {getDictDataFun}  //把这个方法 export 出去
}

上面就是一个 hooks 的方法了

引入到要使用的页面去使用

import useDictDataCanUse from '@/hooks/useDictDataCanUse'
const { getDictDataFun } = useDictDataCanUse()

//------------
 在template中的使用
 如果是 el-select 中使用
   <el-form-item prop="source_from">
        <el-select class="w-[200px]" style="width:200px" v-model="queryParams.source_from" clearable placeholder="客户来源">
           <el-option label="全部" value=""></el-option>
          <el-option v-for="(item,index) in getDictDataFun('source_from')" :key="index" :label="item.name" :value="parseInt(item.value)"></el-option>
   		</el-select>
 </el-form-item>

如果是table-column中使用
  <el-table-column label="渠道来源" prop="source_from">
                        <template v-slot:default ="{ row }">
                            <el-tag effect="plain">{{ getDictDataFun('source_from',row.source_from) }}</el-tag>
                        </template>
                    </el-table-column>
//-------------

以上就是用一个 hooks 解决了, 表格,查询框中的字典显示问题了,注意 hooks中返回的数据一定是 响应式数据 ref reactive 定义的, 因为这样, 页面标签才会监测到数据的变化,作出响应变化, (最主要的原因, 还是因为数据的请求是异步的,有可能页面显示的时候还没有得到数据, 但是响应式的数据,就不会被异步来防碍了,大至是这个意思,细品一下)

到此这篇关于Vue3使用hooks解决字典数据的显示问题的文章就介绍到这了,更多相关Vue3 hooks字典数据显示问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue.js实现按钮的动态绑定效果及实现代码

    Vue.js实现按钮的动态绑定效果及实现代码

    本文通过实例代码给大家介绍了Vue.js实现按钮的动态绑定效果,代码简单易懂,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-08-08
  • 关于Element UI table 顺序拖动方式

    关于Element UI table 顺序拖动方式

    这篇文章主要介绍了关于Element UI table 顺序拖动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 前端面试手撕合集之纯HTML、Vue和React组件

    前端面试手撕合集之纯HTML、Vue和React组件

    Vue 和React都是当前非常流行的前端框架,它们都可以用来构建单页面应用(SPA)和响应式的用户界面,这篇文章主要介绍了前端面试手撕代码之纯HTML、Vue和React组件的相关资料,需要的朋友可以参考下
    2026-02-02
  • 前端实现简单的sse封装方式(React hook Vue3)

    前端实现简单的sse封装方式(React hook Vue3)

    这篇文章主要介绍了前端实现简单的sse封装方式(React hook Vue3),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 在Vue 3中使用OpenLayers读取WKB数据并显示图形效果

    在Vue 3中使用OpenLayers读取WKB数据并显示图形效果

    WKB作为一种紧凑的二进制格式,在处理和传输空间数据时具有明显优势,本文介绍了如何在Vue 3中使用OpenLayers读取WKB格式的空间数据并显示图形,感兴趣的朋友一起看看吧
    2024-12-12
  • vue利用axios来完成数据的交互

    vue利用axios来完成数据的交互

    这篇文章主要介绍了vue利用axios来完成数据的交互,本文通过实例代码给大家讲解数据交互方法及安装方法,需要的朋友可以参考下
    2018-03-03
  • VUE插件vue-treeselect的使用及说明

    VUE插件vue-treeselect的使用及说明

    这篇文章主要介绍了VUE插件vue-treeselect的使用及说明,具有很好的参考价值,希望对大家有所帮助。
    2023-07-07
  • vue单页缓存存在的问题及解决方案(小结)

    vue单页缓存存在的问题及解决方案(小结)

    这篇文章主要介绍了vue单页缓存存在的问题及解决方案(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 详解利用jsx写vue组件的方法示例

    详解利用jsx写vue组件的方法示例

    这篇文章主要给大家介绍了关于利用jsx写vue组件的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
    2017-07-07
  • 记一次用vue做的活动页的方法步骤

    记一次用vue做的活动页的方法步骤

    这篇文章主要介绍了记一次用vue做的活动页的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论