Vue3使用hooks解決字典數(shù)據的顯示問題
我們在使用 element-plus的時候,經常會使用一些字典數(shù)據, 在搜索框的時候,字典數(shù)數(shù)要使用 el-select el-option 來顯示,當在table表格的時候,我們通常記錄的是 字典數(shù)據的id , 又要把它改變成 字典數(shù)據的 name 屬性
因為上面的位置有很多表都會使用的, 所以我們在 vue3 中最好是寫一個公共的方法, 每個頁面都可以隨意使用, 這里, 我們就想到了使用 vue3中的 hooks
我們的字典的數(shù)據格式如下
hooks 文件的代碼如下:
import { getDictData } from '../../src/api/app' //這里是字典列表的請求接口 import {ref,onMounted} from 'vue' export default function(){ const dictDataCanUse = ref([]); //注意, 這里要定義成響應式的數(shù)據,其它頁才可以用, //getDictDataFun 接收兩個參數(shù),也可能是一個參數(shù), 如果是只接收一個參數(shù), 說明是要獲取字典列表,給 el-select el-option 等來使用的,如果是兩個參數(shù), 則說明是給 table-column中的顯示數(shù)據名稱來使用的 const getDictDataFun = (str,value = "")=>{ //注意這個地方不能使用 async 和 await ,因為這個函數(shù)是要導出去給 模板使用的, 而如果加了 async ,則返回的是一個 promise 函數(shù), 頁面中用不了 let label = ref(""); if(Object.keys(dictDataCanUse.value).length == 0 || dictDataCanUse.value[str] == undefined){ 第一次請求的時候 是沒有值的 dictDataCanUse.value[str] = []; 這里我們先的把數(shù)據賦成空數(shù)組, 不然后面的dictDataCanUse.value[str].find 這句會報錯 let res = getDictData({ type: str }).then(res=>{ dictDataCanUse.value = res; //這里我們請求并更改了 dictDataCanUse }) } if(value){ //如果有value ,我們得到label來返回數(shù)據 let labelitem = dictDataCanUse.value[str].find(item=>{ return item.id == value }) label.value = labelitem.name?labelitem.name:""; } // 如果 value 不為空,則返回 label ,如果為空, 則返回字典數(shù)據 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中返回的數(shù)據一定是 響應式數(shù)據 ref reactive 定義的, 因為這樣, 頁面標簽才會監(jiān)測到數(shù)據的變化,作出響應變化, (最主要的原因, 還是因為數(shù)據的請求是異步的,有可能頁面顯示的時候還沒有得到數(shù)據, 但是響應式的數(shù)據,就不會被異步來防礙了,大至是這個意思,細品一下)
到此這篇關于Vue3使用hooks解決字典數(shù)據的顯示問題的文章就介紹到這了,更多相關Vue3 hooks字典數(shù)據顯示問題內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決vue打包后刷新頁面報錯:Unexpected token <
這篇文章主要介紹了解決vue打包后刷新頁面報錯:Unexpected token <相關知識點,需要的朋友們參考下。2019-08-08vue中echarts關系圖動態(tài)增刪節(jié)點以及連線方式
這篇文章主要介紹了vue中echarts關系圖動態(tài)增刪節(jié)點以及連線方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07如何解決this.$refs.form.validate()不執(zhí)行的問題
這篇文章主要介紹了如何解決this.$refs.form.validate()不執(zhí)行的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Vue 3 中使用 OpenLayers 實時顯示 zoom 
本文介紹了如何在 Vue 3 中使用 OpenLayers 來獲取地圖的 zoom 值以及四角坐標信息,并實時更新數(shù)據,這種方式可以用于 GIS 應用開發(fā),幫助用戶更好地了解當前地圖范圍,感興趣的朋友一起看看吧2025-04-04Vue.sync修飾符與$emit(update:xxx)詳解
這篇文章主要介紹了Vue.sync修飾符與$emit(update:xxx),實現(xiàn)思路非常簡單,文章介紹了.sync修飾符的作用和使用.sync修飾符的寫法,實現(xiàn)代碼簡單易懂對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11