Vue3でアイコンを使用する2つの例

Vue3でアイコンを使用する2つの例

テクノロジースタックとバージョン Vite2 + Vue3 + fontAwesome5

Vue3 でアイコンを使用する方法、fontAwesome はシンプルで使いやすいのですが、必要なアイコンが見つからない場合もあります。 svg方式を使用すると、必要なものを直接ダウンロードして使用できます。種類がより充実しており、基本的にニーズを満たさないアイコンはありません。ただし、fontAwesomeほど簡単ではなく、毎回対応する画像をダウンロードする必要があります。

1. SVGを使用する

使用したいSVG画像をダウンロードし、src/iconsフォルダに保存します。

b fsとsvgに依存するローダーをインストールする

コマンド: npm install svg-sprite-loader

コマンド: npm install --save fs

c テンプレートファイルindex.vueを作成する

テンプレートファイルコード

<テンプレート>
    <svg :class="svgClass" v-bind = "$attrs">
        <use :xlink:href="アイコン名"></use>
    </svg>
</テンプレート>


<スクリプトの設定>

「vue」から、defineProps、computed をインポートします。

const props = defineProps({
    名前: {
      タイプ: 文字列、
      必須: true
    },
    色:
      タイプ: 文字列、
      デフォルト: ''、
    }
})

const iconName = computed(()=>`#icon-${props.name}`);
const svgClass = 計算済み(()=> {
    // console.log(props.name,'props.name');
    if (props.name) {
        `svg-icon icon-${props.name}` を返します
    }
      'svg-icon' を返す
});

</スクリプト>

<スタイル スコープ lang ="scss">
    .svg-アイコン{
        幅: 3em;
        高さ: 3em;
        塗りつぶし: 現在の色;
        境界線: 実線 2px 赤;
        垂直位置合わせ: 中央;
    }
</スタイル>>

d グローバル登録 main.js

'./components' から { svgIcon } をインポートします。
.component('svg-icon',svgアイコン)

e インポート処理関数を作成し、プラグインにsvgBuilder.jsを作成する

コード

'fs' から { readFileSync, readdirSync } をインポートします。


idPerfix = '' とします
const svgTitle = /<svg([^>+].*?)>/
const clearHeightWidth = /(幅|高さ)="([^>+].*?)"/g

const hasViewBox = /(viewBox="[^>+].*?")/g

定数クリアリターン = /(\r)|(\n)/g

関数 findSvgFile(dir) {
  定数svgRes = []
  定数 dirents = readdirSync(dir, {
    ファイルタイプ: true
  })
  for (const dirent of dirents) {
    (dirent.isDirectory())の場合{
      svgRes.push(...SvgFile を検索(dir + dirent.name + '/'))
    } それ以外 {
      const svg = readFileSync(dir + dirent.name)
        .toString()
        .replace(クリアリターン、'')
        .replace(svgTitle, ($1, $2) => {
        
          幅を0にする
          高さを0にする
          コンテンツ = $2.replace(
            クリア高さ幅、
            (s1, s2, s3) => {
              s2 === '幅'の場合{
                幅 = s3
              } そうでない場合 (s2 === '高さ') {
                高さ = s3
              }
              戻る ''
            }
          )
          if (!hasViewBox.test($2)) {
            コンテンツ += `viewBox="0 0 ${幅} ${高さ}"`
          }
          `<symbol id="${idPerfix}-${dirent.name.replace( を返します。
            '.svg',
            ''
          )}" ${content}>`
        })
        .replace('</svg>', '</symbol>')
      svgRes.push(svg)
    }
  }
  svgResを返す
}

エクスポート const svgBuilder = (path, perfix = 'icon') => {
  if (path === '') 戻り値
  idPerfix = パーフィックス
  const res = findSvgFile(パス)
  
  戻る {
    名前: 'svg-transform',
    変換インデックスHTML(html) {
      html.replace() を返す
        '<本文>',
        `
          <本文>
            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" スタイル="位置: 絶対; 幅: 0; 高さ: 0">
              ${res.join('')}
            </svg>
        `
      )
    }
  }
}

f 設定ファイルを変更し、svgBuilderを設定ファイルにインポートします。

vite.config.js を変更する

'./src/plugins/svgBuilder' から { svgBuilder } をインポートします。'

デフォルトのdefineConfigをエクスポートする({
プラグイン: [
      vue(),
      // 対応する関数を呼び出して svg を処理する svgBuilder('./src/icons/') // 対応するフォルダー。そうでない場合は見つかりません]
})

SVGの使用

コア部分

  <svg-icon name="questionmark" />//name svgイメージを取得します

2. fontAwesomeを使用する

npmインストール依存関係

$ npm i --save @fortawesome/fontawesome
$ npm i --save @fortawesome/vue-fontawesome

$ npm i --save @fortawesome/fontawesome-free-solid
$ npm i --save @fortawesome/fontawesome-free-regular
$ npm i --save @fortawesome/fontawesome-free-brands

b mian.js グローバル登録

    // オンデマンドでインポート import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
    '@fortawesome/fontawesome-svg-core' から { ライブラリ } をインポートします。
    '@fortawesome/free-solid-svg-icons' から { faAd } をインポートします
    
    '@fortawesome/free-solid-svg-icons' から { faAddressBook } をインポートします。
    
    ライブラリを追加します(faAddressBook)
    // すべてをインポートする import { fas } from '@fortawesome/free-solid-svg-icons'
    '@fortawesome/free-brands-svg-icons' から { fab } をインポートします。
    ライブラリを追加します(fas,fab)
    
    .component('font-awesome-icon', FontAwesomeIcon)
    

c 使用

    //オンデマンドインポートの使用<font-awesome-icon icon="address-book" class="fa-spin fa-lg"/>
    //グローバルインポートの使用 <font-awesome-icon :icon="['fas','address-book']" />

3 ソース

ソースフォントAwesome https://www.jb51.net/article/228944.htm

ソース svg https://www.jb51.net/article/228948.htm

4 結論

対応するテクノロジー スタックとバージョンを決定し、手順に従えば問題は発生しません。

これで、Vue3 でアイコンを使用する 2 つの方法についての記事は終了です。Vue3 でアイコンを使用する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3でelement-plusを使用する方法の詳細な説明
  • Vue3 の element-plus で Icon アイコンをグローバルに使用するプロセスの詳細な説明

<<:  HTML の長いテキストは、タグの幅を超えると自動的に切り捨てられます。

>>:  グリッド共通レイアウトの実装

推薦する

Centos7 での DNS サーバーの構築の概要

目次1. プロジェクト環境: 2: DNSサーバーの設定i: 前方解析を構成する: ii: 逆解像度...

CSS フロートプロパティ図 フロートプロパティの詳細

CSS の float プロパティを正しく使用することは、カバーすべき内容が多く、ブラウザの互換性の...

docker を使用した pxc クラスターのインストールに関する詳細なチュートリアル

目次序文事前準備ディレクトリを作成するcustom.cnf を作成する証明書を作成するpxc クラス...

フロントエンドページのポップアップマスクはページのスクロールを禁止します

フロントエンド開発者がよく遭遇する問題は、ユーザーに情報を提示するためのポップアップ ウィンドウを作...

Dockerボリュームのファイルマッピング方法

背景ブロックチェーン ログ モジュールで作業しているときに、コンテナーが実行されている場合は、ログ ...

Docker用国産イメージウェアハウスの使い方

1. 問題の説明何らかの理由により、中国でのDockerイメージのダウンロード速度は特に遅くなります...

IOSデータベースアップグレードデータ移行の詳細な例

IOSデータベースアップグレードデータ移行の詳細な例まとめ:昔、データベースのバージョン アップグレ...

CSSアニメーションを途中で止めて姿勢を維持する方法

序文かつて、難しい問題に遭遇しました。タワークレーンからスイングハウスを落下させる必要がありましたが...

MySQL データベースの詳細な説明 (Ubuntu 14.0.4 LTS 64 ビットベース)

1. MySQLデータベースの構成と関連概念まず、MySQL はリレーショナル データベースである...

js 配列 fill() 充填メソッド

目次1. fill() 構文2. fill() の使用3. まとめ序文:配列の初期化方法についてはよ...

Web開発でボックスを中央に配置するいくつかの方法

1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...

JS での Reduce Fold Unfold の使用法の詳細な説明

目次折りたたむ(減らす) for...of の使用whileループの使用折り畳み実装に近い展開する配...

js の通常形式の日付と時刻に 0 を自動的に追加する 2 つのソリューション

目次背景解決策1アイデア:コード:解決策2アイデア:要約する参照する背景日付と時間をフォーマットする...

MacでNodeとnpmを完全にアンインストールする方法

npmアンインストール sudo npm アンインストール npm -g この文に遭遇して npm ...