vue3聲明字段名為枚舉的類型詳解
vue3聲明字段名為枚舉類型
下面是Type的枚舉聲明,共有6個字段
enum Type {
? primary = "primary",
? success = "success",
? warning = "warning",
? warn = "warn", // warning alias
? danger = "danger",
? info = "info",
}TypeScript 中聲明類型的關(guān)鍵字有兩個,interface 和 type,在聲明 key 不確定類型的字段時稍有不同。
使用 type 進(jìn)行聲明:
type ColorConfig = {
? [key in Type]: Colors;
};使用 interface 卻只能像下面這樣:
interface ColorConfig {
? [key: string]: Colors;
}因為 interface 的索引只能是基礎(chǔ)類型,類型別名也不可以。而 type 的索引可以是復(fù)合類型。
vue使用提升之"枚舉"應(yīng)用
方式一(適用于簡易過濾器中)
// enum.js**文件
/**
?* 獲取枚舉值:STATUSMAP.TTT
?* 獲取枚舉描述:STATUSMAP.getDesc('SH')
?* 通過枚舉值獲取描述:STATUSMAP.getDescFromValue('TG')
?*/
let STATUSMAP = createEnum({
? SH: ['SH', '審核中'],
? TG: ['TG', '審核通過']
});
function createEnum(definition) {
? const valueMap = {};
? const descMap = {};
? for (const key of Object.keys(definition)) {
? ? const [value, desc] = definition[key];
? ? valueMap[key] = value;
? ? descMap[value] = desc;
? }
? return {
? ? ...valueMap,
? ? getDesc(key) {
? ? ? return (definition[key] && definition[key][1]) || '無';
? ? },
? ? getDescFromValue(value) {
? ? ? return descMap[value] || '無';
? ? }
? }
}
export default STATUSMAP;view文件
<el-row>
? ?<el-button>枚舉測試</el-button>
? ?<p>當(dāng)前狀態(tài):{{STATUS.getDescFromValue('SH')}}</p>
? ?<p>也可用通過枚舉名稱獲取描述:{{STATUS.getDesc('HHH')}}</p>
?</el-row>
?<!-- 過濾器中使用 則在filters過濾器中直接使用函數(shù)返回值 -->方拾二(過濾器,循環(huán)列表)
// order.js文件
/**
?* 定義枚舉值?
?*/
export default {
? order: [
? ? { value: 'TJ', label: '已提交' },
? ? { value: 'CZ', label: '處理中' },
? ? { value: 'CL', label: '已處理' },
? ],
? orderDetail: [
? ? { value: 'DF', label: '待發(fā)貨' },
? ? { value: 'FH', label: '已發(fā)貨' },
? ? { value: 'QS', label: '已簽收' },
? ]
}// constants.js文件
/**
* 定義枚舉工具
* ?
*/
import order from './order/index.js';
let constants = {
? ...order
};
let valueMap = {};
let nameMap = {};
Object.keys(constants).forEach(key => {
? valueMap[key] = [];
? nameMap[key] = {};
? constants[key].forEach(event => {
? ? valueMap[key].push(event);
? ? nameMap[key][event.value] = event.label;
? });
});
export {
? valueMap,
? nameMap
}/**
* view文件
*/
<template>
?? ?<h3>枚舉值用于展示</h3>
?? ?<el-row>
?? ??? ?<el-button v-for="(item, index) in valueMap.order" :key="index">{{item.label}}</el-button>
?? ?</el-row>
?? ?<h3>枚舉值過濾器</h3>
?? ?<el-row>
?? ??? ?<el-button>{{enumValue | filterStatus('orderDetail')}}</el-button>
?? ?</el-row>
</template>
<script>
?? ?import { valueMap, nameMap } from '@/constants';
?? ?export default {
?? ? ?data() {
?? ? ? ?return {
?? ? ? ? ?STATUS: STATUS,
?? ? ? ? ?valueMap,
?? ? ? ? ?enumValue: 'FH', // 發(fā)貨
?? ? ? ?}
?? ? ?},
?? ? ?filters:{
?? ? ? ?filterStatus: function(val, key){
?? ? ? ? ?if(!val && val !== 0){
?? ? ? ? ? ?return '無';
?? ? ? ? ?}
?? ? ? ? ?return nameMap[key][val];?
?? ? ? ?}
?? ? ?}
?? ?}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue3??mark.js?實現(xiàn)文字標(biāo)注功能(案例代碼)
這篇文章主要介紹了vue3??mark.js?實現(xiàn)文字標(biāo)注功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09
vue?實現(xiàn)列表跳轉(zhuǎn)至詳情且能添加至購物車功能
列表頁面顯示數(shù)據(jù),點擊跳轉(zhuǎn)到對應(yīng)的詳情頁,詳情頁可以添加并跳轉(zhuǎn)到購物車,購物車具有常見功能,這篇文章主要介紹了vue?實現(xiàn)列表跳轉(zhuǎn)至詳情且能添加至購物車,需要的朋友可以參考下2022-10-10
Vue如何實現(xiàn)響應(yīng)式系統(tǒng)
這篇文章給大家整理了關(guān)于Vue如何實現(xiàn)響應(yīng)式系統(tǒng)的相關(guān)知識點內(nèi)容,有興趣的朋友可以參考學(xué)習(xí)下。2018-07-07
v-for循環(huán)中使用require/import關(guān)鍵字引入本地圖片的幾種方式
在做項目的過程中,模版相同,可是不標(biāo)題和圖片不同,循環(huán)標(biāo)題我們知道可以用v-for循環(huán),可是該怎么引入本地圖片呢?下面這篇文章主要給大家介紹了v-for循環(huán)中使用require/import關(guān)鍵字引入本地圖片的幾種方式,需要的朋友可以參考下2021-09-09
vue路由傳參之使用query傳參頁面刷新數(shù)據(jù)丟失問題解析
這篇文章主要介紹了vue路由傳參使用query傳參頁面刷新數(shù)據(jù)丟失問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
如何解決Element-ui的el-table固定列后出現(xiàn)的表格錯位問題
這篇文章主要介紹了如何解決Element-ui的el-table固定列后出現(xiàn)的表格錯位問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09

