1. 程式人生 > 其它 >vue專案中使用字典(進階)

vue專案中使用字典(進階)

  需求說明:這個是在之前的公司參與開發的一個系統中,發現在別人構建的專案中有一個字典翻譯功能,在工作中經常使用到:比如列表頁的狀態翻譯、不同狀態對應不同顏色等等,因為有的時候後端返回的介面可能只有狀態值,沒有狀態說明,這時候新增字典就很有用,只要在配置檔案中設定好狀態值對應的說明,以及狀態值對應的顏色,通過簡單呼叫就可以實現想要的效果

一、如何使用

(1)首先在專案的src目錄下建立一個dictionary.js的檔案,然後在檔案中寫入狀態欄位物件,然後將內容暴露出去如下:

// 本地字典
export default {
  // 修改記錄審批狀態
  approvalStatus: {
    
0: '待審批', 1: '審批通過', 2: '審批駁回', 3: '取消申請' }, // 審批狀態字型顏色 approvalColor: { 0: '#00FFFF', 1: '#00FF00', 2: '#FF2A00', 3: '#cccccc' } }

這裡面的approvalStatus和approvalColor是狀態值對應的描述說明物件和狀態值對應的顏色說明物件,在頁面使用時會用到

(2)然後在專案的入口檔案main.js中,引入配置好的字典檔案,這裡我是配合全域性過濾器一起使用,將狀態值對應的狀態說明返回,程式碼如下:

import dictionary from '@/dictionary.js'


//
全域性過濾器,配合本地字典一起使用 Vue.filter('dict', function (filterStr, filterNm) { let getStr = String(filterStr) let returnVal = '' const dicAry = Object.entries(dictionary) if (!getStr.includes(',')) { dicAry.forEach(item => { if (filterNm === item[0]) { Object.entries(item[1]).forEach(forItem => {
if (getStr === forItem[0]) { returnVal = forItem[1] } }) } }) } else { // 這裡是如果返回的狀態存在多個,以逗號','返回的狀態說明就是多個說明拼接起來的 let strAry = getStr.split(',') strAry.forEach(item => { dicAry.forEach(item2 => { if (filterNm === item2[0]) { Object.entries(item2[1]).forEach(forItem => { if (item === forItem[0]) { returnVal += forItem[1] } }) } }) }) } return returnVal })

下面的else部分程式碼,是因為我的接口裡面有返回的狀態值是多個,然後以逗號‘,’分隔,狀態對應的值是①②③這樣的,UI想要的效果是①②這樣連線的,所以我做了拼接處理,這裡可以根據自己專案需求進行改動即可

(3)最後則是如何在vue元件中使用了,程式碼如下:

// 在data()中定義並引入全域性過濾器 
dict: Vue.filter('dict')

html部分:
<span
    class="ctr-li-nm"
    style="width: 200px"
    :style="{'color': dict(item.status, 'approvalColor')}"
    >
    {{ item.status | dict("approvalStatus") }}
</span>

  這樣就可以對列表的狀態進行翻譯以及不同狀態的樣式處理了,我個人認為,表格中的資料會非常多,如果在行上面用v-if或者:class這些來判斷當前的狀態說明和樣式,如果只有兩三種狀態還好,有的狀態有十來個狀態值,都寫判斷的話會讓頁面的程式碼有點亂,通過新增字典配合過濾屬性處理,可以方便快捷的實現想要的效果。

  這個是我自己查了一些資料,參考一些開發博主的全域性過濾器效果,思考改變思路後實現的,也已經用在專案裡面,可以達到我想要的效果,寫一下留個記錄,希望可以給遇到這樣需求的開發小夥伴們提供個思路。