vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する

vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する

序文

この記事では、vue3 を使用してカウント機能を実装するグローバル コンポーネントをカプセル化する方法を説明します。ショッピング サイトでよく使用される数量選択モジュールの適用シナリオは一目でわかると思います。実装方法を見てみましょう。

1. カプセル化の重要性

  • プロジェクトにはそれが必要とされる場所がたくさんあります
  • モジュール開発によりコードの冗長性が減り、開発がより効率的になります
  • 一度パッケージ化すればどこでも使用可能

2. どのようにカプセル化しますか?

1. アイデア

vue3 では v-model を使用して、親コンポーネントと子コンポーネント間の相互の値転送を完了します。この記事では、vueuse/core のカプセル化された useVModel を使用してこの機能を実装し、カプセル化されたパブリック コンポーネントから制御する値をスローします。

2. 準備

依存関係をインストールする

プロジェクトのルートディレクトリで任意のターミナルを開き、npm install @vueuse/core@5.3.0 を実行します。

グローバルコンポーネントのカプセル化

前回の記事と同様に、vueプラグインを通じてグローバルコンポーネントとして登録します

注: この記事では、カプセル化されたグローバル コンポーネントを src/components の下に配置します。ファイルの場所と名前は自分で決めることができます。

新しいファイルmy-numbox.vueを作成します

コードは次のとおりです(例):

<テンプレート>
  <div class="my-numbox">
    <div class="label">
      <slot>数量</slot>
    </div>
    <div class="numbox">
      <a href="javascript:;" @click="toggle(-1)" :class="{notallow: modelValue === 1}">-</a>
      <input type="text" 読み取り専用 :value="num">
      <a href="javascript:;" @click="toggle(1)" :class="{notallow: modelValue === inventory}">+</a>
    </div>
  </div>
</テンプレート>
<スクリプト>
'@vueuse/core' から {useVModel} をインポートします。
エクスポートデフォルト{
  名前: 'MyNumbox',
  小道具: {
    モデル値: {
      タイプ: 数値、
      デフォルト: 1
    },
    在庫:
      タイプ: 数値、
      必須: true
    }
  },
  セットアップ(props、{emit}){
    // サードパーティのメソッドによって制御されるデータの双方向バインディング const num = useVModel(props, 'modelValue', emitting)
    // 製品データの変更操作を制御する const Toggle = (n) => {
      (n < 0) の場合 {
        // 1つ減算する if (num.value > 1) {
          数値 -= 1
        }
      } それ以外 {
        // 1つの操作を追加します if (num.value < props.inventory) {
          数値 += 1
        }
      }
    }
    { num, トグル } を返す
  }
}
</スクリプト>
<style スコープ lang="less">
.my-numbox {
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
  .notallow{
    カーソル: 許可されていません。
  }
  .ラベル {
    幅: 60ピクセル;
    色: #999;
    左パディング: 10px;
  }
  .nu​​mbox {
    幅: 120ピクセル;
    高さ: 30px;
    境界線: 1px 実線 #e4e4e4;
    ディスプレイ: フレックス;
    > {
      幅: 29px;
      行の高さ: 28px;
      テキスト配置: 中央;
      テキスト装飾: なし;
      背景: #f8f8f8;
      フォントサイズ: 16px;
      色: #666;
      &:最初の型 {
        右境界線:1px 実線 #e4e4e4;
      }
      &:最後の型 {
        左境界線:1px 実線 #e4e4e4;
      }
    }
    > 入力 {
      幅: 60ピクセル;
      パディング: 0 5px;
      テキスト配置: 中央;
      色: #666;
    }
  }
}
</スタイル>

ここではVueプラグインを介してグローバルコンポーネントとして登録する手順は説明しません。前回の記事を読んでください。
vue3——虫眼鏡効果を自分で実現する

2. 使用

.vueで終わるファイルであればどこでも使えます

コードは次のとおりです(例):

コンポーネントタグの内容は、パブリックコンポーネントのデフォルトスロットの内容を上書きします。

在庫は在庫数量、つまりユーザーが選択できる最大値です(ここではデモンストレーション用の固定値です)

<テンプレート>
  <div class="home-banner">
    <MyNumbox v-model="num" :inventory="5">アイテム数:</MyNumbox>
  </div>
</テンプレート>

<スクリプト>
'vue' から { ref } をインポートします
エクスポートデフォルト{
  名前: 'アプリ'、
  設定 () {
    定数num = ref(1)
    { 数値 } を返す
  }
}
</スクリプト>

<スタイル lang="less">
.ホームバナー{
  マージン: 100px 自動;
  幅: 500ピクセル;
  高さ: 100px;
}
</スタイル>

3. 効果の実証

要件が満たされていることがわかります。最大値または最小値に達すると、ボタンをクリックすると無効になります。

要約する

これで、vue3 を使用してカウント関数コンポーネントのカプセル化例を実装するこの記事は終了です。vue3 カウント関数コンポーネントの関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue3 コンパイルプロセス - ソースコード分析
  • Vue3における7種類のコンポーネント通信の詳細
  • Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明
  • Vue2とVue3の兄弟コンポーネント通信バスの違いと使い方
  • Vue3.0はドロップダウンメニューのカプセル化を実装します
  • Vue3.0はチェックボックスコンポーネントのカプセル化を実装します
  • vue3とvue2の利点の比較
  • Vue3とTypeScriptを組み合わせたプロジェクト開発の実践記録
  • Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要
  • Vue3 AST パーサー - ソースコード分析

<<:  Nginx コンパイル済み nginx - 新しいモジュールを追加

>>:  MySQL インデックスのパフォーマンス最適化の問題に対する解決策

推薦する

MySQL 5.7 のキーワードと予約語の詳細な説明

序文MySQL と Oracle のキーワードはまったく同じではありません。Oracle データベー...

nginx でディレクトリ ホワイトリストと IP ホワイトリストを設定する方法

1. ディレクトリホワイトリストを設定する:指定されたリクエストパスに制限を設定しないでください。た...

MySQL 5.7 でパスワードを忘れた場合の解決方法の詳細な説明

環境: [root@centos7 ~]# uname -r 3.10.0-514.el7.x86_...

mysql8.0.11クライアントがログインできない問題の解決方法

この記事では、mysql8.0.11クライアントがログインできない問題の解決策を紹介します。参考まで...

MySQL データベースのステートメント ワイルドカード ファジー クエリの概要

MySQL エラー: パラメータ インデックスが範囲外です (1 > パラメータ数、つまり 0...

JavaScriptにおけるPromiseの使い方と注意点について(推奨)

1. 約束の説明Promise は、非同期操作の最終状態 (失敗または正常完了) とその結果の値を...

Windows で Mysql を起動したときに 1067 が表示される場合の解決策

数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...

MySQLクエリ最適化プロセスを理解する

目次パーサーとプリプロセッサクエリオプティマイザーMySQL クエリの最適化には、解析、前処理、最適...

HTMLエリアタグの詳しい説明

<area> タグは、イメージ マップ内の領域を定義します (注: イメージ マップはク...

ARMアーキテクチャにおける関数呼び出しプロセスの簡単な分析

目次1. 背景知識1. ARM64レジスタの紹介2. STP命令の詳しい説明(ARMV8マニュアル)...

音楽プレーヤーアプリ(アプリケーションソフトウェア)の分析と再設計 美しい音楽プレーヤーインターフェースの設計方法

無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...

レスポンシブウェブデザインを実現するためにIEでCSS3メディアクエリをサポートする

今日の画面解像度は、320 ピクセル (iPhone) ほど小さいものから、2560 ピクセル以上 ...

Vueウォッチの監視方法の概要

目次1. Vueにおけるwatchの役割はその名の通り、監視の役割です。 2. このオブジェクトのプ...

MySQL 8.0.22 winx64 のインストールと設定のグラフィックチュートリアル

mysql 8.0.22 winx64のインストールと設定のグラフィックチュートリアルは参考までに、...

フォームのデフォルトの送信方法を変更する方法

htmlのデフォルトの送信方法は、postではなくgetです。postに変更したい場合は、 meth...