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カスタムv-has命令

アプリケーションシナリオバックグラウンド管理システムを例にとると、各ユーザーには異なるボタン権限があ...

データベースを削除して逃げる?xtraback を使用して MySQL データベースをバックアップする方法

1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的...

HTML テーブル マークアップ チュートリアル (6): 暗い境界線の色属性 BORDERCOLORDARK

表では、右下の境界線の色を個別に定義したり、セルの左上の境界線の色を定義したりできます。これら 2 ...

VantフレームワークをWeChatアプレットに導入するプロセス全体の記録

序文WeChat ミニプログラムのネイティブ UI が少し物足りないと感じることがあるので、サードパ...

JavaScriptの記事では、Webフォームの操作方法を説明します。

1. はじめに先ほど、ウェブページの急速な発展について紹介しました。今回は、より深い内容についてお...

MySQL におけるデフォルトの使用法の詳細な説明

NULL および NOT NULL 修飾子、DEFAULT 修飾子、AUTO_INCREMENT 修...

シンプルなショッピングカート機能を実現するjs

この記事の例では、簡単なショッピングカート機能を実現するためのjsの具体的なコードを参考までに共有し...

Ubuntu20.04 VNCのインストールと設定の実装

VNC はリモート デスクトップ プロトコルです。 VNC を使用して Ubuntu 20.04 を...

Google Recaptcha 認証を使用した Vue 実装例

最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...

HTTP および HTTP コラボレーション Web サーバー アクセス フロー図

Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

Linux で SVN サーバーをインストールする方法

1. Yumのインストール yum でサブバージョンをインストール 2. 構成1. 倉庫を作る/ho...

CSS3 のフレックスレイアウト幅の無効性の解決策

2 列レイアウトはプロジェクトでよく使用されます。この効果を実現する方法はたくさんあります。 しかし...

CSS 前景と背景の自動カラーマッチング技術の紹介 (デモ)

1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...