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要素のID属性とName属性の違い

今日、私は <a href="#13"></a> につい...

Linux での tcpdump コマンド例の詳細な説明

序文簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

vue3 カスタムディレクティブの詳細

目次1. カスタム指示の登録1.1. グローバルカスタム指示1.2. ローカルカスタム指示2. カス...

crontab スケジュールされたタスクが実行されない理由の分析と解決

序文Linux のスケジュールされたタスクを実装する方法としては、cron、anacron、at な...

複数の古いプレーヤーの埋め込みコード

ウェブページに表示されるプレーヤーは、WMP/RealPlayer/Flash Player に過ぎ...

フロントエンドネットワーク、JavaScriptの最適化、開発のヒントについて簡単に説明します。

1. ネットワークの最適化YSlowには23のルールがあります。これら数十のルールは、主に、不要な...

div の水平レイアウトを両側に揃える 3 つの方法

この記事では、主に、div の水平レイアウトの両側の配置を実装する 3 つの方法を紹介し、それらを共...

HTMLにおけるbackground-image属性の設定の詳細な説明

写真といえば、まず背景画像が思い浮かびます。私たちの装飾の多くは背景画像を使用して実現されているから...

Vue.js ソースコード解析のカスタム手順の詳細な説明

序文コア機能のデフォルトの組み込みディレクティブ (v-model および v-show) に加えて...

MySQL ステートメントの概要

目次1. データベースの使用を選択2. 情報を表示する3. テーブルを作成する4. データを挿入する...

泡の小さな鋭角効果を実現するCSS

効果画像(境界線の色が薄すぎるので、{} で囲みます): { }参考リンク Pure CSS バブル...

MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明

1 要件の概要MySQL5.6本番データベースの複数のテーブルのデータは、Oracle11gデータウ...

Google Chromeの自動入力問題に対する完璧な解決策

Google Chrome では、ログインに成功すると、パスワードを記憶するかどうかを尋ねるメッセー...

フロートとBFCをクリアするCSSメソッド

イギリスBFC: ブロック書式設定コンテキストBFCレイアウトルール内箱は縦方向に次々に配置されます...

MySQLがフルテーブルスキャンを実行するいくつかの状況

目次ケース1:ケース2:ケース3:簡単にまとめると:過去 2 日間で、完全なテーブル スキャンを引き...