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 の長いテキストは、タグの幅を超えると自動的に切り捨てられます。

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

推薦する

Vueでスケルトンスクリーンを実装する例

目次スケルトンスクリーンの使用Vueアーキテクチャスケルトンスクリーンアイデアの概要抽象コンポーネン...

docker run後、ステータスは常にExitedになります

追加するdocker run -it -name test -d nginx:latest /bin...

docker inspect コマンドの使用に関するヒント

説明と紹介Docker inspect は Docker クライアントのネイティブ コマンドであり、...

MySQL バージョンは、2 つのタイムスタンプ型の値をサポートしていないバージョンよりも低いです。

MySQL エラー:エラー コード: 1293 テーブル定義が正しくありません。CURRENT_T...

HTML H タイトルタグの使用

H タグ、特に h1 タグの使用は常に議論の的となっている問題であり、私たちが研究する価値のある問題...

Alibaba Cloud Ubuntu 16.04 が IPSec サービスを構築

IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...

Linux ファイルシステムの説明: ext4 以降

今日は、ext3 や他の以前のファイル システムとの違いを含め、ext4 の歴史について説明します。...

MySQLでテーブルを接続するいくつかの方法

MySQL テーブルでの接続方法は実は非常に簡単なので、ここではその特徴を簡単にリストします。テーブ...

JSはカリキュラムタイムテーブルアプレット(スーパーカリキュラムタイムテーブルを模倣)を実装し、カスタムバックグラウンド機能を追加します

概要:市販されているいくつかのタイムテーブルソフトウェアから教訓を得ました。機能が複雑すぎるため、タ...

Web ページのデザインを学ぶときに習得すべきコードは何ですか?

この記事では、Web ページ制作を学ぶ過程で習得すべきテクニックの一部を詳しく紹介します。これらの内...

MySQL における ESCAPE キーワードの使用法の詳細な説明

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...

MySQL の中国語文字化け問題の解決方法

1. LinuxのMySQLで中国語の文字化けが発生する。以下の操作を実行する。 vi /etc/m...

JS クロスドメイン ソリューション React 構成 リバース プロキシ

クロスドメインソリューションjsonp (get をシミュレート) CORS (クロスオリジンリソー...

Webpack でよく使われる 12 個の Loader を共有する (要約)

目次序文スタイルローダーCSSローダーsassローダーpostcssローダーバベルローダーtsローダ...

Docker での環境変数の使用とよくある問題の解決策

序文Docker はコンテナの環境変数を設定できます。設定方法は 2 つあります。イメージを作成する...