91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue后臺中如何優雅的書寫狀態標簽

發布時間:2021-08-08 19:20:44 來源:億速云 閱讀:262 作者:小新 欄目:開發技術

這篇文章主要介紹Vue后臺中如何優雅的書寫狀態標簽,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

    前言

    在后臺系統開發中,對于列表,常常有一些狀態字段的展示,比如審核狀態、退貨申請狀態等等,并且往往伴隨有狀態篩選的列表查詢條件,同時狀態顯示對應不同顏色,在寫代碼時有些人往往是這么做的:

    <template>
      <el-form :model="query">
        <el-form-item label="審批狀態" prop="status">
          <el-select v-model="query.status" clearable>
            <el-option
              v-for="item in statusOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary">查詢</el-button>
          <el-button type="danger">重置</el-button>
        </el-form-item>
      </el-form>
      <el-table :data="list">
        <el-table-column label="審批狀態">
          <template #default="{ row }">
            <el-tag v-if="row.status === 0" type="primary">審核中</el-tag>
            <el-tag v-if="row.status === 1" type="success">審核成功</el-tag>
            <el-tag v-if="row.status === 2" type="danger">審核失敗</el-tag>
          </template>
        </el-table-column>
      </el-table>
    </template>
    export default {
      data() {
        return {
          query: {
              status: null
          },
          statusOptions: [
              { label: '審核中', value: 0 },
              { label: '審核成功', value: 1 },
              { label: '審核失敗', value: 2 }
          ],
          list: []
        }
      }
    }

    以上代碼雖然是實現了需求,但卻顯得不夠優雅,代碼維護成本較高:

    • 標簽里充斥著較多的 v-if 且與 data 里的數據重復,造成冗余。

    • 當有新增或修改時,需要改動多個地方,例如要改動文案時下拉框和表格里的都要改。

    • 如果是多個頁面都有該狀態需要顯示,復制粘貼,最后當需求變動時勢必會增加改動成本。

    優化

    針對上面的問題,咱們通過以下措施來進行搶救。

    抽離變量

    建立常量文件存放 statusOptions,增加 el-tag 組件的 type 字段來區分顯示不同的顏色,最后將其導出。

    // const/index.js
    // 審核狀態
    const statusOptions = [
      { label: '審核中', value: 0, type: 'primary' },
      { label: '審核成功', value: 1, type: 'success' },
      { label: '審核失敗', value: 2, type: 'danger' }
    ]
    
    export {
      statusOptions
    }

    二次封裝 el-tag 組件

    // components/stats-tag.vue
    <template>
      <el-tag :type="getValue('type')">
        {{ getValue('label') }}
      </el-tag>
    </template>
    export default {
      name: 'StatusTag',
      
      props: {
        options: {
          type: Array,
          required: true,
          default: () => []
        },
        status: {
          type: [String, Number],
          required: true
        }
      },
      
      computed: {
        getValue({ options, status }) {
          return (key) => {
            const item = options.find(e => e.value === status)
            return (item && item[key]) || ''
          }
        }
      }
    }

    使用

    <template>
      <el-form :model="query">
        <el-form-item label="審批狀態" prop="status">
          <el-select v-model="query.status" clearable>
            <el-option
              v-for="item in statusOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary">查詢</el-button>
          <el-button type="danger">重置</el-button>
        </el-form-item>
      </el-form>
      <el-table :data="list">
        <el-table-column label="審批狀態">
          <template #default="{ row }">
            <!-- 使用 -->
            <status-tag 
              :options="statusOptions"
              :status="row.status"
            />
          </template>
        </el-table-column>
      </el-table>
    </template>
    import StatusTag from '@/components/status-tag'
    // 導入
    import { statusOptions } from '@/const'
    
    export default {
      components: {
        StatusTag
      },
      
      data() {
        return {
          statusOptions
        }
      }
    }

    經過優化后,如果有修改變動,只需要改動 const/index.js 文件即可,無需到處修。

    // const/index.js
    // 審核狀態
    const statusOptions = [
      { label: '審核中', value: 0, type: 'primary' },
      { label: '審核成功', value: 1, type: 'success' },
      { label: '審核失敗', value: 2, type: 'danger' },
      // 增加取消狀態
      { label: '審核取消', value: 3, type: 'warning' }
    ]
    
    export {
      statusOptions
    }

    以上是“Vue后臺中如何優雅的書寫狀態標簽”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    vue
    AI

    塘沽区| 华安县| 辛集市| 余江县| 洪湖市| 信宜市| 泰宁县| 兴隆县| 乌恰县| 秀山| 紫金县| 常德市| 滁州市| 莫力| 清远市| 贵德县| 阿拉善右旗| 永州市| 万源市| 山东| 嵊泗县| 犍为县| 霸州市| 乡宁县| 吴江市| 双峰县| 田东县| 宁都县| 湖州市| 开原市| 镇沅| 五家渠市| 佳木斯市| 金坛市| 峨边| 堆龙德庆县| 府谷县| 叙永县| 康平县| 广元市| 宁夏|