序文この記事では、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; } .numbox { 幅: 120ピクセル; 高さ: 30px; 境界線: 1px 実線 #e4e4e4; ディスプレイ: フレックス; > { 幅: 29px; 行の高さ: 28px; テキスト配置: 中央; テキスト装飾: なし; 背景: #f8f8f8; フォントサイズ: 16px; 色: #666; &:最初の型 { 右境界線:1px 実線 #e4e4e4; } &:最後の型 { 左境界線:1px 実線 #e4e4e4; } } > 入力 { 幅: 60ピクセル; パディング: 0 5px; テキスト配置: 中央; 色: #666; } } } </スタイル> ここではVueプラグインを介してグローバルコンポーネントとして登録する手順は説明しません。前回の記事を読んでください。 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Nginx コンパイル済み nginx - 新しいモジュールを追加
>>: MySQL インデックスのパフォーマンス最適化の問題に対する解決策
序文MySQL と Oracle のキーワードはまったく同じではありません。Oracle データベー...
1. ディレクトリホワイトリストを設定する:指定されたリクエストパスに制限を設定しないでください。た...
環境: [root@centos7 ~]# uname -r 3.10.0-514.el7.x86_...
この記事では、mysql8.0.11クライアントがログインできない問題の解決策を紹介します。参考まで...
MySQL エラー: パラメータ インデックスが範囲外です (1 > パラメータ数、つまり 0...
1. 約束の説明Promise は、非同期操作の最終状態 (失敗または正常完了) とその結果の値を...
数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...
目次パーサーとプリプロセッサクエリオプティマイザーMySQL クエリの最適化には、解析、前処理、最適...
<area> タグは、イメージ マップ内の領域を定義します (注: イメージ マップはク...
目次1. 背景知識1. ARM64レジスタの紹介2. STP命令の詳しい説明(ARMV8マニュアル)...
無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...
今日の画面解像度は、320 ピクセル (iPhone) ほど小さいものから、2560 ピクセル以上 ...
目次1. Vueにおけるwatchの役割はその名の通り、監視の役割です。 2. このオブジェクトのプ...
mysql 8.0.22 winx64のインストールと設定のグラフィックチュートリアルは参考までに、...
htmlのデフォルトの送信方法は、postではなくgetです。postに変更したい場合は、 meth...