通常項目中的圖標解決方案有以下幾種:javascript
這種方式存在的問題:css
A 項目的圖標資源(由於懶啊), 就會致使 45 沒有用到可是也加載了.html
每次都只下載一個 svg 文件下來.
這樣不會形成圖標冗餘. 而後也不須要去從新下載項目.java
經過這種方式下載下來的 svg 文件, 咱們有幾種方式引入:node
要求咱們將全部的 SVG 圖標合併成一個文件.
合併是一件事情, 合併以後, 就不能支持: 提早提供1000個圖標, 在打包的時候只打包被使用到的.git
經過這種方式引入:github
import Icon from 'wc-svg-icon'; Vue.use(Icon);
在須要使用圖標的時候:shell
<icon name="eye"/> 或者 <icon-eye/>
能不能實現? 能!npm
基於 Vue & SVG 的 icon 解決方案svg
npm i wc-svg-icon --save-dev // main.js import Icon from 'wc-svg-icon'; import 'wc-svg-icon/style.css'; Vue.use(Icon); 備註: style.css 不強制要求引入, 不引入也能夠正常運行, 只是 animation 參數無效.
<icon name="xxxx"/> 這裏的 'xxxx' 是你給定的 SVG 圖標的名稱. 好比說你如今有 10 個 SVG 圖標, 你須要作的事情是: 1. 在 node_modules 裏面找到 wc-svg-icon 目錄 2. 把這 10個圖標, 拷貝到 wc-svg-icon 目錄中.
icon 組件接受如下 props 配置選項:
name: 圖標的名稱, 須要和 SVG 名相同, 不須要帶路徑.好比: <icon name="hello"/> fill: SVG 圖標的 fill 顏色, 默認會使用 SVG 本來的顏色, 若是你傳遞了 fill 屬性, 則會使用你所傳遞的.好比: <icon name="hello" fill="red"/> // 此時圖標會呈現 red 色. height: 控制 SVG 圖標的高度 width: 控制 SVG 圖標的寬度 固然你也能夠經過爲 <icon> 添加 class 的方式來設置 SVG 的樣式. <icon class="foo"/> 之因此把 fill, height, width 單獨提出來是由於這些對我而言常常用到. animation: 設置圖標的動畫效果, 好比: <icon animation="rotate"/> ... 當前只支持一種效果, 就是 rotate(旋轉). 其實這個玩意有點雞肋, 建議若是須要 animation 效果的同窗, 能夠直接本身寫 animation 或者引入 animate.css 而後這樣: <icon class="animated bounce"/>
後續會不斷的添加一些默認的 SVG icon, 因爲打包的時候沒有引入的icon 不會打包進項目, 因此icon的個數
不會影響到打包的體積大小.若是你是但願將本項目直接拷貝到本身的項目中使用
npm i xml-loader --save-dev