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!」というエラーが表示される問題を解決します。

推薦する

Webpack でよく使われる 12 個の Loader を共有する (要約)

目次序文スタイルローダーCSSローダーsassローダーpostcssローダーバベルローダーtsローダ...

電子署名を実装するWeChatミニプログラム

この記事では、WeChatミニプログラムで電子署名を実装するための具体的なコードを参考までに紹介しま...

CSS の vertical-align プロパティとベースラインの問題に関する深い理解

vertical-align属性は、主にインライン要素の配置を変更するために使用されます。インライン...

Logrotate は 2 時間ごとに Catalina.out ログローテーションを実装します

1. Logrotateツールの紹介Logrotate はログファイル管理ツールです。Linux に...

Tomcat マルチインスタンスの展開と構成の原則

1. ファイアウォールをオフにし、Tomcatのインストールに必要なソフトウェアパッケージを/opt...

MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

序文MySQL に精通している読者は、MySQL が非常に迅速に更新されることに気付くかもしれません...

一定時間後にNavicatがデータベースから自動的に切断される問題の解決方法

これは、データベース サーバーが、接続が多すぎるのを避けるために、一定時間非アクティブな状態が続くと...

VMwareでCentOSがインターネットにアクセスできない問題を素早く解決

昨日、VMware に CentOS7 をインストールしました。Tomcat パッケージを転送するた...

Windows 8 での MySQL 5.6.15 のインストールと設定方法のグラフィック チュートリアル

MySQLは私がとても気に入っているデータベースです。今日はWindows 8システムでインストール...

MySQLの保存時間の不一致の問題を解決する

Java を使用してシステム時間を取得し、それを MySQL データベースに保存した後、時間タイプが...

WeChatアプレット学習ノート: ページ構成とルーティング

最近、小さなプログラムの開発を勉強して見直しており、学習結果のいくつかをメモしています。公式の We...

mysqlサーバーは--skip-grant-tablesオプションで実行されています

MySQLサーバーは--skip-grant-tablesオプションで実行されているため、このステー...

JS for ループで setTimeout を使用する 4 つのソリューション

目次概要解決策 1: クロージャ解決策2: 構造を分割する解決策3:解決策4: setTimeout...

ソースコード分析からTomcatがサーブレットの初期化を呼び出す方法の詳細な説明

目次導入1. Tomcatを起動するコード2. Tomcatフレームワーク3. コンテナを作成する ...

CSS @font-face パフォーマンス最適化の詳細な理解

この記事では主に、フォント読み込みの最適化に関する一般的な戦略を紹介します。内容の大部分は参考資料と...