Vue で SVG アイコンを導入する 2 つの方法

Vue で SVG アイコンを導入する 2 つの方法

Vue で SVG アイコンを導入する方法

Vue で svg アイコンを導入する方法 1

インストール

yarn に svg-sprite-loader --dev を追加します

svg コンポーネント

インデックス.vue

<!-- svg コンポーネント -->
<テンプレート>
 <svg class="svg-icon" :class="svgClass" aria-hidden="true">
  <:xlink:href="アイコン名" /> を使用します
 </svg>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: 'SvgIcon',
 小道具: {
  // svg名 svgName: {
   タイプ: 文字列、
   必須: true
  }
 },
 計算: {
  アイコン名() {
   `#icon-${this.svgName}` を返します
  },
  svgクラス() {
   if (this.svgName) {
    'svg-icon' + this.svgName を返します
   } それ以外 {
    'svg-icon' を返す
   }
  }
 }
}
</スクリプト>

<style lang="less" スコープ>
.svgアイコン{
 幅: 100ピクセル;
 高さ: 100px;
 垂直位置合わせ: -0.15em;
 塗りつぶし: 現在の色;
 オーバーフロー: 非表示;
}
</スタイル>

グローバルに登録する

インデックス

'vue' から Vue をインポートします
'@/components/SvgIcon' から SvgIcon をインポートします。

// グローバルに登録する Vue.component('svg-icon', SvgIcon)

const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('./svg', false, /\.svg$/)
すべて必須(必須)

設定ファイル

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

ページで使用されている

<!-- svg-name は svg 名です -->
<svg-icon svg-name="ic_home_news" />

Vue で svg アイコンを導入する方法 2

npm で svg-sprite-loader をインストールします --save-dev

vue.config.jsに次のコードを追加します。

定数パス = require('path');
関数resolve(dir) {
 // __dirname プロジェクト ルート ディレクトリの絶対パス return path.join(__dirname, dir);
}
モジュール.エクスポート = {
 チェーンWebpack: config => {
 svgRule は config.module.rule('svg') に追加されます。
 // 既存のローダーをすべてクリアする
 // これを行わないと、後続のローダーはこのルールの既存のローダーの後に追加されます svgRule.uses.clear();
 svgルール
  .test(/\.svg$/)
  .include.add(path.resolve(__dirname, './src/icons/svg'))
  。終わり()
  .use('svg-sprite-loader')
  .loader('svg-sprite-loader')
  .オプション({
  シンボルID: 'icon-[名前]'
  });
 config.module.rule の 'file' を設定します。
 ファイルルールはクリア() を使用します。
 ファイルルール
  .test(/\.svg$/)
  .exclude.add(path.resolve(__dirname, './src/icons/svg'))
  。終わり()
  .use('ファイルローダー')
  .loader('ファイルローダー');
 },
}

次のファイルディレクトリを作成します

SvgIcon.vue コード

<テンプレート>
 <svg :class="svgClass" xmlns="http://www.w3.org/2000/svg">
 <use :xlink:href="iconName" xmlns:xlink="http://www.w3.org/1999/xlink" />
 </svg>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
 名前: 'SvgIcon',
 小道具: {
 アイコンクラス: {
  タイプ: 文字列、
  必須: true
 },
 クラス名: {
  タイプ: 文字列、
  デフォルト: ''
 }
 },
 計算: {
 アイコン名() {
  `#icon-${this.iconClass}` を返します。
 },
 svgクラス() {
  if (this.className) {
  'svg-icon ' + this.className を返します。
  } それ以外 {
  'svg-icon' を返します。
  }
 }
 }
};
</スクリプト>
<スタイルスコープ>
.svgアイコン{
 幅: 1em;
 高さ: 1em;
 垂直位置合わせ: -0.15em;
 塗りつぶし: 現在の色;
 オーバーフロー: 非表示;
}
</スタイル>

SVGアイコンを配置するSVGフォルダ

index.js コード

'vue' から Vue をインポートします。
import SvgIcon from '@/components/SvgIcon'; // svg コンポーネント // グローバルに登録
Vue.component('svg-icon', SvgIcon);
const req = require.context('./svg', false, /\.svg$/);
const requireAll = requireContext => requireContext.keys().map(requireContext);
すべて要求します(req);

最後にmain.jsで導入します

'./icons' をインポートします。 

ページでSVGを使用する

icon-classはSVGアイコン名、class-nameはカスタマイズしたいクラス名です

<svg-icon icon-class="features_ic_risk@1x" class-name="icon"></svg-icon>

要約する

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

以下もご興味があるかもしれません:
  • Vue で SVG アイコン コンポーネントを書く方法
  • VueプロジェクトでSVGアイコンを使用する方法を教えます

<<:  vue+element テーブルで動的な列フィルタリングを実装するためのサンプルコード

>>:  Vue で HTML 5 ドラッグ アンド ドロップ API を使用する方法

推薦する

Docker Composeでコンテナ管理の問題を解決する

Docker の設計では、コンテナは 1 つのアプリケーションのみを実行します。しかし、現在のアプリ...

Vue はネストされたルーティングメソッドの例を実装します

1. ネストされたルーティングはサブルーティングとも呼ばれます。実際のアプリケーションでは、通常、ネ...

CSS を使用して複数の方法で等高レイアウトを実装するサンプル コード

この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...

Linuxはscpコマンドを使用してファイルをローカルコンピュータにコピーし、ローカルファイルをリモートサーバーにコピーします。

以下のように表示されます。リモート サーバーのファイルをローカルにコピーします。 scp -r -P...

フロントエンドHTMLスキン変更機能の実装コード

透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...

WeChat アプレット ピッカー マルチ列セレクター (モード = multiSelector)

目次1. 効果図(複数列) 2. 通常セレクター: mode = selector、複数列セレクター...

jQueryブリージングカルーセルの制作原理を詳しく解説

この記事では、jQueryブリージングカルーセル制作原理の具体的なプロセスを参考までに紹介します。具...

Nginx リバース プロキシと負荷分散の実践

リバースプロキシリバースプロキシとは、プロキシサーバーを介してユーザーのアクセス要求を受信し、ユーザ...

MySQL 8.0.23のルートパスワードをリセットするための最適なソリューション

この方法は2021年2月7日に編集されました。私が使用しているバージョンは8.0.23です。事件の原...

VueでEchartsチャートの幅と高さの適応を実現する実践

目次1. インストールとインポート2. 手ぶれ補正機能を定義する3. チャートコードを描くinit ...

JS を使用してクリップボード内の Excel コンテンツを解析する方法

目次序文1. イベントとクリップボードを貼り付ける2. クリップボード内のコンテンツ形式3. HTM...

Linux 継続的インテグレーションで Maven を自動的にインストールする方法

Mavenパッケージを解凍する tar xf apache-maven-3.5.4-bin.tar....

nginx のロードバランシングとリバースプロキシの説明

目次負荷分散負荷分散分類1. DNS 負荷分散2. IP負荷分散3. リンク層の負荷分散4. ハイブ...

MySQLインスタンスが起動できない問題の分析と解決

目次序文シナリオ分析要約する序文数日前、友人がWeChatで私に連絡してきて、マシンがダウンタイムか...

Linux (Ubuntu 18.04) に Anaconda をインストールする詳細な手順

Anaconda は、大規模なデータ処理、予測分析、科学計算のための最も人気のある Python デ...