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

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

序文

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

1. カプセル化の重要性

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

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

1. アイデア

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

2. 準備

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

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

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

前回の記事と同様に、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 インデックスのパフォーマンス最適化の問題に対する解決策

推薦する

HTML チェックボックスとラジオボタンスタイルの美化の簡単な例

HTML チェックボックスとラジオボタンスタイルの美化の簡単な例チェックボックス: XML/HTML...

jsは配列の平坦化を実装します

目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...

Js の継承とプロトタイプチェーンを理解するのに役立つ記事

目次継承とプロトタイプチェーン継承されたプロパティ継承されたメソッドJavaScript でのプロト...

Linux でのインストール中にソフトウェア パッケージの依存関係レポートに関連する問題の解決策

目次背景1) yumのkeepchche機能を有効にする: 方法1 2) yum-utils ソフト...

Docker ベースの MySQL マスタースレーブレプリケーション環境を構築するための実装手順

1. はじめに以前のプログラム アーキテクチャは次の形式になります。プログラムのサイズが大きくなると...

Ubuntu 20.04 をインストールした後に行うべきこと (初心者向けガイド)

Ubuntu 20.04 がリリースされ、多くの新機能が導入されましたが、慣れていない機能も多くあ...

JS ネイティブ 2048 ゲーム ソース コード共有 (インターネットの最新情報)

最近、アルゴリズムについて学んでいて、アルゴリズムで動く小さなゲームに出会いました。そのコードは次の...

Angularプロジェクトにおける共有モジュールの実装の詳細な説明

目次1. 共有共通モジュール2. 共有マテリアルモジュール3. 共有確認ダイアログ1. 共有共通モジ...

仮想マシンのLinux初心者がIPを設定し、ネットワークを再起動する

仮想マシンを初めて使用する方や、仮想マシンに Linux をインストールしたばかりの方は、システムが...

MySQL/MariaDB でピボット テーブルを実装する方法のサンプル コード

前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...

Vueは水平の斜めの棒グラフを実装します

この記事では、水平傾斜棒グラフを実装するためのVueの具体的なコードを参考までに共有します。具体的な...

Linux でのソース パッケージ インストールのサービス管理

目次1. ソースパッケージサービスの起動管理2. ソースパッケージサービスのセルフスタート管理3. ...

jQuery ステップ進行軸プラグインの実装コード

毎日のjQueryプラグイン - ステップ進捗軸 ステップ進捗軸ツール系のサイトでは入門チュートリア...

Linuxでファイルを削除してもスペースが解放されない問題の対処方法

問題の背景業務システムのサーバ監視システムからディスク使用率が90%に達したという早期警告通知が来た...