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 を使用する方法

推薦する

77.9K の GitHub リポジトリを持つ Axios プロジェクト: 学ぶ価値のあることは何でしょうか?

目次序文1. Axiosの紹介2. HTTPインターセプターの設計と実装2.1 インターセプターの紹...

MySQL 起動エラー 1067 および文字セットを変更して再起動した後の無効な回復

公式サイトからmysql-5.6.37-winx64.zipの解凍バージョンをダウンロードし、構成フ...

フィルターと固定間の競合の原因と解決策の詳細な説明

問題の説明body内でfilter属性を使用すると、 fixed要素の位置が不正確になります。つまり...

CocosCreatorがスキル冷却効果を実装

CocosCreatorがスキルCD効果を実現多くのゲームにはスキルがあります。プレイヤーがスキルボ...

JavaScript の絶妙なスネーク実装プロセス

目次1. HTML構造を作成する2. テーブルを作成する3. ヘビの頭と体を作る4. 食べ物を作る5...

MySQL binlog を使用して誤って削除されたデータベースを復元する方法

目次1 現在のデータベースの内容を表示し、データベースをバックアップする2 bin_log関数を有効...

React forwardRefの使い方と注意点

これまで react.forwardRef は react の高階コンポーネントには適用できませんで...

Vue の動的メニュー、動的ルートの読み込みと更新の落とし穴

目次必要:アイデア:レッスン:テキストを共有する:要約する必要:インターフェイスからサブメニュー デ...

nginxで複数のサーバーを簡単に構成する方法

1: nginx のインストール方法については詳しく説明しません。Baidu で検索してください。 ...

MySQL エラー コード 1862 の解決方法: パスワードの有効期限が切れています

ブロガーは 1 ~ 2 か月間 MySQL を使用していませんでしたが、今日この問題に遭遇しました。...

Nginx ロードバランシングの設定方法

目次Nginx 負荷分散構成Nginx 負荷分散戦略ポーリング(デフォルト)重さip_ハッシュ公正(...

MySql ビュー、トリガー、ストアド プロシージャに関する簡単な説明

ビュービューとは何ですか?ビューの役割は何ですか?ビューは仮想テーブルであり、データ自体を含まない論...

HTML チュートリアル: 順序付きリスト

<br />原文: http://andymao.com/andy/post/103.h...

2つのウェブサイトページ翻訳プラグインの共有

TranslateThis URL: http://translateth.is Google 翻訳...

マークアップ言語 - リスト

標準化されたデザインソリューション - マークアップ言語とスタイルマニュアルWeb 標準ソリューショ...