Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られているという興味深い点を発見しました。この記事ではその使い方を詳しく説明します。

1. Vue プロジェクトを作成します (CLI を使用してスキャフォールディングを構築します。このテスト プロジェクトは Vue CLI4 で構成されています)

2. カスタムコンポーネントを作成する

ここに画像の説明を挿入

具体的なコードは次のとおりです。

<テンプレート>
  <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="iconName" rel="external nofollow" />
  </svg>
</テンプレート>

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

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

3. ルートディレクトリにアイコンを作成し、新しい index.js を作成します (これは後でグローバルにインポートされます)。また、svg 画像を保存するための新しい svg ディレクトリを作成します (svg のダウンロード方法については、Alibaba のアイコンフォントからダウンロードできます。Baidu で検索してください)。

ここに画像の説明を挿入

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)
すべて必須(必須)

4.導入のためにmain.jsをグローバルにインポートする

ここに画像の説明を挿入

5. この時点で、プロジェクトはvue.config.jsも設定する必要があります(そうしないと表示されません)

定数パス = require('path')
モジュール.エクスポート = {
    チェーンWebpack: config => {
        svgRule は config.module.rule('svg') に定義されます。
        svgRule.uses.clear()
        svgルール
            .test(/\.svg$/)
            .include.add(path.resolve(__dirname, './src/icons')).end()
            .use('svg-sprite-loader')
            .loader('svg-sprite-loader')
            .オプション({
                シンボルID: 'icon-[名前]'
            })
        定数 fileRule = config.module.rule('file')
        fileRule.uses.clear()
        ファイルルール
            .test(/\.svg$/)
            .exclude.add(path.resolve(__dirname, './src/icons'))
            。終わり()
            .use('ファイルローダー')
            .loader('ファイルローダー')
    }
}

それでおしまい;

6. プロジェクトでコンポーネントを使用する

ここでは関数コンポーネントを使用して紹介しますが、これは通常のコンポーネントの使用方法でも紹介できます。

<スクリプト>
エクスポートデフォルト{
  機能的: 真、
  小道具: {
    レベル:
      タイプ: 数値、
      必須: true、
    },
  },
  レンダリング: 関数 (h, コンテキスト) {
    console.log(コンテキスト);
    vnodes = [] とします。
    { レベル } = context.props;
    // vnodes.push(<i class="el-icon-edit" style="width:19px"></i>);
    vnodes.push(<svg-icon icon-class="date"></svg-icon>);
    vnodes.push(<span class="span">{レベル}</span>);
    vnode を返します。
  },
};
</スクリプト>
<スタイルスコープ>
.span {
  フォントサイズ: 50px;
}
</スタイル>

注: icon-class の値は、svg のファイル名そのものになります。

これで、Vue プロジェクトで SVG コンポーネントをカプセル化して構成する手順に関するこの記事は終了です。Vue SVG コンポーネントのカプセル化と構成の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue3 再帰コンポーネントカプセル化の全プロセス記録
  • Vue ポップアップ ボックス コンポーネントのカプセル化のサンプル コード
  • Vueは画像プレビューコンポーネントのカプセル化と使用を実装します
  • コンポーネントのカプセル化からの Vue スコープ スロットの実装
  • Vuejs ページの地域化とコンポーネントのカプセル化の実装
  • Vue の全選択コンポーネントのカプセル化についてどれくらい知っていますか?

<<:  Tomcatアーキテクチャの原則をアーキテクチャ設計に分析する

>>:  CSSでフレックス配置を表示する(レイアウトツール)

推薦する

エラー 1045 (28000): ユーザー ''root''@''localhost'' のアクセスが拒否されました (パスワード使用: YES) 実用的な解決策

昨日はデータベースへの接続に問題はありませんでしたが、今日はデータベースへの接続時にこのエラーが報告...

MybatisはSQLクエリのインターセプションと変更の詳細を実装します

序文インターセプターの機能の 1 つは、特定のメソッドの呼び出しをインターセプトできることです。イン...

CSS3 はアニメーション属性を使用してクールな効果を実現します (推奨)

animation-name アニメーション名。複数のアニメーションがバインドされていることを示す...

MySQL インデックスの使用方法 (単一列インデックスと複数列インデックス)

1. 単一列インデックスどの列にインデックスを作成するかを選択することは、パフォーマンス最適化プロ...

ネイティブJSを使用した遅延読み込みlazyLoadの3つの方法の概要

目次序文方法1: 高コントラスト方法2: getBoundingClientRect() APIを使...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル (Windows の場合)

この記事では、MySQL 8.0.15 winx64のインストールと設定方法を参考までに紹介します。...

MySQL における between の境界と範囲の説明

境界範囲間のmysql間の範囲は両側の境界値を含む例: 3 から 7 までの id は、id >...

HTML 基本構造_Powernode Java アカデミー

多くの場合、Web ページ開発を学ぶときに最初に印象に残るのは、html または htm サフィック...

MACでMYSQLデータベースのパスワードを忘れた場合の解決策

Mac オペレーティングシステムで MYSQL データベースのパスワードを忘れた場合の簡単な解決策1...

VUE ユニアプリライフサイクルに関する簡単な説明

目次1. アプリケーションライフサイクル2. ページのライフサイクルコンポーネントライフサイクル要約...

MySQL の列から行への変換のヒント (共有)

序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...

JavaScript でオブザーバー パターンを実装する方法

目次概要オブザーバーパターンの応用シナリオオブザーバーパターンの実装要約する概要オブザーバー パター...

React NativeのScrollViewプルダウンリフレッシュ効果

この記事では、React Native ScrollViewのプルダウンリフレッシュ効果の具体的なコ...

UbuntuにProtobuf 3をインストールするための詳細なチュートリアル

いつインストールするかprotoc コマンドを使用しても Protoc が見つからない場合は、インス...

Vue で video.js を使用して m3u8 形式のビデオを再生する方法

目次1. インストール2. videojsの紹介3. コンポーネントでのテストと使用1. 基本的な自...