亚洲欧美日韩在线播放-亚洲欧美日韩在线不卡-亚洲欧美日韩在线不卡中文-亚洲欧美日韩在线精品一区二区-日韩精品中文字幕久久-日韩精品中文字幕一区三区

建站技術(shù)
當(dāng)前位置: 四五合圍 > 網(wǎng)絡(luò)營銷知識 > 建站技術(shù)
Ant-Design-Vue 3.x 圖標(biāo)庫如何實現(xiàn)自動引入?
發(fā)布日期:2024-02-22 閱讀次數(shù):

需求來源

Ant-Design-Vue升級到2.x以上的版本之后,自帶的圖標(biāo)庫就不支持通過給組件傳遞一個代表指定圖標(biāo)的屬性來使用了。

1. 之前


<-- 顯示Home圖標(biāo) -->
<a-icon type="home" />

2. 現(xiàn)在


<template>
  <message-outlined :style="{fontSize: '16px', color: '#08c'}" />
</template>
<script setup>
  import { MessageOutlined } from '@ant-design/icons-vue';
</script>zh

在這種形式下,每個要用到的圖標(biāo)都需要手動引用一次,并且由于每個組件沒有統(tǒng)一標(biāo)準(zhǔn)的名稱,所以無法使用打包工具提供的一些自動引入組件的插件(比如vite的unplugin-vue-components)

這樣做也會帶來一定的好處:打包的時候只會打包用到的圖標(biāo)的代碼,不會引入其它沒用到的圖標(biāo)。

但是任何需求都不是絕對,總有不一樣的需求,比如我;

實際測試,完整的圖標(biāo)庫打包,經(jīng)過Gzip壓縮后只有130 kb+;完全可以接受

Tree Shaking

Tree Shaking 指的就是當(dāng)引入一個模塊的時候,不引入這個模塊的所有代碼,只引入需要的代碼


Tree-shaking的本質(zhì)是消除無用的js代碼。無用代碼消除在廣泛存在于傳統(tǒng)的編程語言編譯器中,編譯器可以判斷出某些代碼根本不影響輸出,然后消除這些代碼,這個稱之為DCE(dead code elimination)

自動引入

1.介紹

本文所指的自動引入指的是,在項目的任意組件內(nèi),直接使用這個圖標(biāo),不需要通過手動引入。同時實現(xiàn)按需引入+自動引入,以我的能力目前沒找到....(打包工具的插件應(yīng)該可以實現(xiàn));

當(dāng)然可以直接在開始運行的時候?qū)胝麄€圖標(biāo)模板,然后循環(huán)注冊到Vue的組件,但是這樣的缺點就是使用圖標(biāo)只能在模板內(nèi)寫死,例如:


<message-outlined :style="{fontSize: '16px', color: '#08c'}" />

但是很多時候,我們想要的是傳遞一個屬性,來動態(tài)顯示不同圖標(biāo),常見的需求場景:定義路由的時候給每個路由定義一個代表圖標(biāo)的元屬性,通過路由生成菜單的時候,直接展示元屬性里指定的圖標(biāo);

模板語法往往適合條件明確的情況,條件不明確了,那就該JSX入場了。

2.實現(xiàn)

首先引入@ant-design/icons-vue整個圖標(biāo)庫,然后Jsx組件內(nèi),通過渲染函數(shù)直接渲染指定的圖標(biāo);基礎(chǔ)代碼如下:


<script>
import {h} from 'vue'
import * as $icon from '@ant-design/icons-vue';

/*
* 自動引入antd icon圖標(biāo)
* */
export default {
  props:['icon'],
  setup(props){
   return ()=>h(
      $icon[props.icon],
       {
            style:{fontSize:"18px"}
       });
  }
}
</script>

3.拓展

@ant-design/icons-vue圖標(biāo)很全,但也有不夠用的時候,這時候就可以考慮,讓這個JSX組件兼容 iconfont圖標(biāo)了;

眾所周知,阿里巴巴圖標(biāo)庫一般都是統(tǒng)一class前綴,@ant-design/icons-vue的名字則是五花八門,這不,判斷的標(biāo)準(zhǔn)不就來了嗎!

如果傳遞的icon屬性是icon開頭,就渲染一個class位圖標(biāo)的i標(biāo)簽,其它的照常作為antd標(biāo)簽渲染;代碼如下:


<script>
import {h} from 'vue'
import * as $icon from '@ant-design/icons-vue';
import config from '@/config'

/*
* 自動引入antd icon圖標(biāo)
* */

export default {
  props:['icon'],
  setup(props){
    /*
    * 判斷是icon還是antd的圖標(biāo)
    * */
    if(props.icon.indexOf('icon-') != -1){
      return ()=>h(
          'i',
          {
            class:"iconfont "+props.icon,
            style:{fontSize:"18px"}
          });
    }else{
      return ()=>h(
          $icon[props.icon],
          {
            style:{fontSize:"18px"}
          });
    }
  }
}

</script>

到此結(jié)束,如果還需要繼續(xù)拓展,那,干就完了!




本站訪客:280499 主站蜘蛛池模板: 国产女教师 | 隔壁老王国产精品福利 | 九九re| 国产午夜看片 | 国产精品久久精品福利网站 | 激情小视频在线观看 | 国产成人精品免费视频大 | 国产精品九九九久久九九 | 九九热在线观看视频 | 精品视频一区二区三区在线播放 | 黄色一级今| 久久精品一区二区三区四区 | 国产高清自产拍av在线 | 精品 日韩 国产 欧美在线观看 | 国产一级一级一级成人毛片 | 久久精品一区二区三区中文字幕 | 免费国产高清精品一区在线 | 国产精品久久福利网站 | 国产精品免费看 | 精品成人免费自拍视频 | 精产国品一二二区视 | 久青草视频97国内免费影视 | 国内一级一级毛片a免费 | 国产在线91区精品 | 多人伦精品一区二区三区视频 | 成人福利在线免费观看 | 九九精品免视频国产成人 | 久久精品国产99国产精偷 | 国产精品嫩草免费视频 | 国产精品 人妖系列 | 国产在线视频色综合 | 免费人成黄页在线观看日本 | 韩国视频一区 | 免费观看欧美一级牲片一 | 免费观看黄色a一级录像 | 国产成人99精品免费观看 | 九九九九九 | 国产精品短视频免费观看 | 国产三级在线播放不卡 | 精品国产精品久久一区免费式 | 大色香蕉色视频大全 |