Vueベースのカスタムコンポーネントを実装してアイコンを導入する

Vueベースのカスタムコンポーネントを実装してアイコンを導入する

序文

プロジェクト開発では、アイコンを使用する方法はたくさんあります。iconfont で適切なアイコンを見つけて、http 経由で使用したり、直接ダウンロードしたりできます。ここでは、カスタム コンポーネントを実装してアイコンを導入する方法を紹介します。

環境を構築する

ここでは、@vue/cli 4.5.13 を使用して新しいプロジェクトを作成し、便宜上、対応する svg アイコンを処理するために依存関係 svg-sprite-loader をインストールする必要があります。

インストール: npm install --save-dev svg-sprite-loader

vue.config.js を構成する

svg-sprite-loader をインストールした後、依存関係を設定するために新しい vue.config.js を作成します。

// vue.config.js
const { 解決 } = require('path')

モジュール.エクスポート = {
  チェーンWebpack(config) {
    設定
      .モジュール
      .rule('svg')
      .除外
      .add('src/icons') を解決します。
      。終わり()
    設定
      .モジュール
      .rule('アイコン')
      .test(/\.svg$/)
      。含む
      .add('src/icons') を解決します。
      。終わり()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .オプション({
        シンボルID: 'icon-[名前]'
      })
  }
}

以下は、chainWebpack を通じて行われた 2 つの構成です。

  • 1つ目は、SVGを処理する元の他の依存関係がsrc/iconsの下のカスタムアイコンファイルを処理しないようにすることです。
  • カスタム アイコン ファイルは svg-sprite-loader によって処理されます。オプションの設定は、生成された svg の symbolId がアイコンとファイル名の連結であることを示します。

新しいアイコンコンポーネントを作成する

コンポーネント ディレクトリに新しい SvgIcon.vue ファイルを作成します。

<テンプレート>
  <i class="icon">
    <!-- aria-hidden、障害のある人の読み取りを支援するため(デバイスは混乱を避けるためにコンテンツを読み取るときにこのタグをスキップします) -->
    <svg aria-hidden="true" :width="サイズ" :height="サイズ" :fill="塗りつぶし色">
      <use :xlink:href="iconName" rel="external nofollow" ></use>
    </svg>
  </i>
</テンプレート>

<script lang="ts">
'vue' から { PropType, toRefs } をインポートします。

エクスポートデフォルト{
  小道具: {
    サイズ: {
      タイプ: Number as PropType<number>、
      デフォルト: 14
    },
    塗りつぶし色: {
      タイプ: String as PropType<string>、
      デフォルト: '#000'
    },
    アイコン名:
      タイプ: String as PropType<string>、
      必須: true
    }
  },
  セットアップ(props: 任意) {
    const { サイズ、塗りつぶし色、アイコン名: _iconName } = toRefs(props)
    const iconName = `#${_iconName.value}`

    戻る {
      サイズ、
      塗りつぶし色、
      アイコン名
    }
  }
}
</スクリプト>

次に、コンポーネントにハングアップする新しいアイコン ディレクトリと新しいインデックス ファイルを作成し、SVG アイコンをインポートします。

// インデックス.ts
'@/components/SvgIcon.vue' から SvgIcon をインポートします。
'vue' から { App } をインポートします

エクスポートデフォルト (app: App) => {
  app.component('svg-icon', SvgIcon)
}

const ctx = require.context('./svg', false, /\.svg$/)
const requestAll = (ctx: __WebpackModuleApi.RequireContext) => ctx.keys().forEach(ctx)

リクエストすべて(ctx)
//メイン.ts
'vue' から {createApp} をインポートします。
'./App.vue' からアプリをインポートします。
'@/icons/index' から installSvgIcon をインポートします

const app = createApp(App)

installSvgIcon(アプリ)
app.mount('#app')

このファイルは次の 2 つのことを行います。

  1. メソッドをエクスポートしてグローバル コンポーネント svg-icon をマウントします。
  2. require.context を使用して、アイコン ファイルを svg ディレクトリに自動的にインポートします。

コンポーネントの使用

まず、SVG アイコン ファイルを icons/svg ディレクトリに保存する必要があります (iconfont で必要なものを見つけます)。

その後、他の場所でも使用できます。

<テンプレート>
  <img alt="Vue ロゴ" src="./assets/logo.png">
  <svg-icon icon-name="アイコンダッシュボード"></svg-icon>
  <HelloWorld msg="Vue.js + TypeScript アプリへようこそ"/>
</テンプレート>

コンポーネント svg-icon を通じて直接導入し、icon-name を渡します。icon-name の値は、icon と svg ファイル名を連結したもので構成されます。

要約する

SVG アイコンを導入するこのカスタム方法は非常に便利です。アイコンを追加したい場合は、次の数ステップで実行できます。

  1. svg ファイルを直接ダウンロードし、対応するディレクトリに配置します。
  2. 次に、svg-icon コンポーネントを介してインポートします。

ただし、CSS を通じてスタイルを変更するのはあまり便利ではありません。

以上で、Vue のカスタムコンポーネントをベースにしたアイコンの導入方法についての記事は終了です。Vue のカスタムアイコンコンポーネントの詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueでカスタムアイコンを使用する方法

<<:  MySQL サーバー 5.5 の接続失敗の解決策

>>:  CentOS システムのディスク パーティションを拡張する方法

推薦する

DockerでPython環境をパッケージ化するプロセスの詳細な説明

docker パッケージング Python 環境の手順は次のとおりです。 1 pip listの下に...

JavaScript の onblur および onfocus イベントの詳細な説明

HTML ページでは、ボタンやテキスト ボックスなどの視覚要素にフォーカスを設定したり、フォーカスを...

Win10 インストール Linux システム チュートリアル ダイアグラム

Windows システムに仮想マシンをインストールするには、 VMware Workstationソ...

MySQL データベースの詳細な説明 - 複数テーブル クエリ - 内部結合、外部結合、サブクエリ、相関サブクエリ

複数テーブルクエリ複数のテーブルから関連するクエリ結果を取得するには、単一の SELECT ステート...

Mysql クエリの結果セットを JSON データに変換するサンプル コード

Mysql はクエリ結果セットを JSON データに変換します 序文 学生テーブル 学生スコアテーブ...

mysqlはストアドプロシージャを使用してツリーノード取得メソッドを実装します。

図に示すように: テーブルデータこのようなツリーの場合、「Gao Yinrui」の下のすべてのノード...

Vue+element はローカル検索機能付きのドロップダウン メニューを実装します

必要:バックエンドは配列オブジェクトを返し、それがフロントエンドで配列に結合されます。配列は名前に従...

CSS3実践手法のまとめ(推奨)

1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....

要素テーブルからヘッダーを削除する方法

show-header属性を使用したドキュメントのヒントshow-header <el-テーブ...

MySQLの日付と時刻の間隔計算の分析例

この記事では、例を使用して、MySQL の日付と時刻の間隔計算について説明します。ご参考までに、詳細...

MySQL 無料インストール版 (zip) のインストールと設定の詳細なチュートリアル

この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...

IE9 のネイティブ ページ互換性の問題に対する解決策についての簡単な説明

序文最近、クライアントのネイティブページを引き継ぎました。顧客は、ページが IE9 以降のバージョン...

HTML での Li タグの使用例

タイトルを左に、日付を右に揃えたいのですが、日付の範囲に float:right を直接追加すると、...

CentOS 8.4 での Docker パッケージのオフラインインストールの問題について

使用する仮想マシンは、サーバー環境をシミュレートする CentOS 8.4 です。外部ネットワークに...

MySQL の垂直テーブルを水平テーブルに変換する方法と最適化のチュートリアル

1. 縦型テーブルと横型テーブル垂直テーブル: テーブル内のフィールドとフィールド値はキーと値の形式...