Vue でコンポーネントを一括インポート、登録、使用する方法

Vue でコンポーネントを一括インポート、登録、使用する方法

序文

コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイルごとに参照して登録することで使用します。この記事では、Vue でコンポーネントを一括導入、登録、使用する方法を紹介します。

1. 使用シナリオ

日常の開発では、次のような状況がよく発生します。

	'components/A' から A をインポートします
	'components/B' から B をインポートします
	'components/C' から C をインポートします
	'components/D' から D をインポートします

このような繰り返しコードに遭遇したとき、次のような最適化を行って、一度にすべてインポートできるのではないかと考えました。そこで、webpack API を見つけて、require.context を呼び出して処理しました。具体的なコードは次のとおりです。

2. 使用手順

関連するもの:

  • コンポーネント名はハイフンで区切られた関数であり、camelCase に変換されます。
  • コンポーネントの is プロパティです。

詳細な説明はコード内にあります:

1. ファイルディレクトリ

2. HTMLコード

<テンプレート>
  <div class="水分析">
    <div class="content-box" ref="contentbox">
      <a-tabs:default-active-key="activeComponent" @change="tabChangeHandle">
        <タブペイン
          v-for="tabList 内の項目"
          :key="アイテムキー"
          :tab="アイテム.タブ"
        </タブペイン>
      </a-タブ>
      <div class="タブペインボックス">
      	<!-- is 属性を通じて、対応するコンポーネント名をバインドし、対応するコンポーネントを表示します-->
        <コンポーネント:is="アクティブコンポーネント"></コンポーネント>
      </div>
    </div>
  </div>
</テンプレート>

3.jsコード

構文: require.context(directory, useSubdirectories, regExp)

  • ディレクトリ: 検索するファイルパス
  • useSubdirectories: サブディレクトリを検索するかどうか
  • regExp: ファイルに一致する正規表現

戻り値: 2 つのメソッドと 1 つのプロパティ

  • keys(): 一致したモジュールの名前の配列を返します。
  • 解決(): テストフォルダ下の一致するファイルの相対パスであるパラメータリクエストを受け取り、プロジェクト全体に対する一致するファイルの相対パスを返します。
  • id: 実行環境の ID。文字列として返されます。主に、ホット ローディングを行う module.hot.accept で使用されます。
<スクリプト>
// 中央の水平線をキャメルケースに変換します var camelCase = function (s) {
  s.replace(/-\w/g, 関数(x) {を返す
    x.slice(1).toUpperCase() を返します。
  });
};
// サブコンポーネントをバッチでインポートします。上記の構文を参照してください。const allComponents = require.context("./comp", false, /\.vue$/);

コンソールログ(allComponents.keys())
// ["./tem-a.vue", "./tem-b.vue", "./tem-c.vue", "./tem-d.vue"]

コンソールログ(allComponents.id)
//./src/views/tempManage/comp 同期 \.vue$

// コンポーネント配列を作成し、以下のコンポーネントに登録します。let resComponents = {};
allComponents.keys().forEach(comName => {
  name = camelCase(comName); とします。
  const comp = allComponents(comName);
  resComponents[name.replace(/^\.\/(.*)\.\w+$/, "$1")] = comp.default;
});

エクスポートデフォルト{
  名前: "WaterQuery",
  コンポーネント: resComponents、
  データ() {
    戻る {
      アクティブコンポーネント: "temA",
      タブリスト: [
        {
          キー: "temA",
          タブ:「コンポーネントA」、
        },
        {
          キー: "temB"、
          タブ:「Bコンポーネント」、
        },
        {
          キー: "temC",
          タブ: 「C コンポーネント」、
        },
        {
          キー: "temD",
          タブ:「Dコンポーネント」、
        },
      ]、
    };
  },
  作成された() {
    if (this.$route.query["val"]) {
      this.activeComponent = this.$route.query["val"];
    }
  },
  メソッド: {
    // タブバーを切り替える tabChangeHandle(val) {
      const {path} = this.$router;

      this.$router.push({
        パス、
        クエリ: {val},
      });
      this.activeComponent = val;
    },
  },
};
</スクリプト>

4. CSS コード (読む必要はありません。コードの完全性のためだけに書かれており、直接実行して表示できます)

<スタイルスコープ>
.水分析{
  高さ: 100%;
  オーバーフロー:自動;
}
.コンテンツボックス{
  高さ: 100%;
}
.タブペインボックス{
  高さ: calc(100% - 62px);
}
</スタイル>

結論

Vue コンポーネントのバッチインポート、登録、使用方法についてはこれで終わりです。Vue コンポーネントのバッチインポートに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueのサブコンポーネント導入方法の詳細な説明
  • vueプロジェクトにelementUIコンポーネントを導入する方法の詳細な説明
  • Vue のすべてのパブリックコンポーネントを簡潔かつ明確に一度に紹介する方法
  • 新しいVueプロジェクトを作成し、コンポーネント要素を導入する方法の詳細な説明
  • Vueがサブコンポーネントエラーを引き起こす問題を解決する
  • オンデマンドで Vue コンポーネントを自動的にインポートする方法

<<:  MySQL で複数のテーブルにビューを作成する方法

>>:  Centos7 に nginx をインストールした後、conf.d ディレクトリに default.conf ファイルがないために「Welcome to nginx on Fedora!」というエラーが表示される問題を解決します。

推薦する

CentOS 8にdockerをインストールする最も詳細な方法

CentOS 8にDockerをインストールする公式ドキュメント: https://docs.doc...

メタタグのビューポートはデバイス画面のCSSを制御します

コードをコピーコードは次のとおりです。 <meta name="viewport&q...

Vueのインストール方法の紹介

目次1. グローバルに登録されたコンポーネント2. グローバルカスタム指示vue 、新しいプラグイン...

Angularコンポーネントの仲介モードの詳細な説明

目次1. 仲介業者モデル2. 例1. 見積コンポーネントに購入ボタンを追加する2. 親コンポーネント...

jQueryのコア機能とイベント処理の詳細な説明

目次イベントページの読み込みイベント委任イベントの切り替えイベント要約するイベントページの読み込み1...

CSSは2つの要素をブレンドする効果(スティッキー効果)を実現します。

数年前、Taobaoのモバイル版の左下隅に面白い丸いボタンがあったことを覚えています。それをクリック...

Win10 での MySQL 8.0 ログインでユーザー 'root'@'localhost' のアクセスが拒否される (パスワード使用: YES) 問題の解決方法

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

Vue で円形プログレスバーを実装する例

データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...

Vue で jsx 構文を正しく使用する方法

目次序文仮想DOM仮想DOMとは仮想DOMの利点レンダリング関数とは何ですか? jsx Vue3 で...

ViteでReactプロジェクトを構築する方法

目次序文Viteプロジェクトを作成する改修プロジェクトディレクトリの規則その他の構成序文毎日鳩、火ば...

Mac で Docker を使用して Oracle をデプロイする方法

Mac で Docker を使用して Oracle をデプロイする方法まずdockerをインストール...

MySQL の一般的な日付比較および計算関数

MySql での時間比較の実装unix_timestamp() unix_timestamp 関数は...

Linux システムで Centos7 を使って ElasticSearch ミドルウェアと共通インターフェースを構築するデモ

1. ミドルウェアの紹介1. 基本概念ElasticSearch は Lucene をベースにした検...

Linuxダイナミックリンクライブラリの使用

通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装...

MySQL マスタースレーブ同期遅延の原因と解決策

歴史的な理由により、MySQL レプリケーションは、REDO ログではなく論理バイナリ ログに基づい...