プロジェクトでは、プロジェクトが呼び出すカスタム パブリック コンポーネントに遭遇します。通常、props を使用してパラメータを定義し、親コンポーネントから渡されたパラメータを受け取り、子コンポーネントの $emits() メソッドを通じて親コンポーネントにデータを返すことができます。 次のようなもの: 親コンポーネント <common-checkbox :checked="goodsSelected" class="left" :height="'16px'" :width="'16px'" @checkChange="checkChange"></common-checkbox> /** * 処理のためのサブコンポーネントフィードバックを受け取る */ チェック変更(値) { this.goodsSelected=value //サブコンポーネントのデータを親コンポーネントに割り当てる} サブコンポーネント /** * 選択したポストバックを切り替える */ トグルチェック(値) { this.$emit('changeCheck', value)// return メソッド、子コンポーネントの変更されたデータを親コンポーネントに返して処理します} しかし、この書き方だと、パブリック コンポーネントを呼び出すページに追加の処理メソッドを記述する必要があり、低レベルすぎるように思えます。フレームワークに付属するパブリック コンポーネントのように、直接 v-model 双方向バインディングを宣言することはできますか?次に、プロジェクトで実際に遭遇するこの状況に対する解決策を示します。 最初の方法: 通常、親コンポーネント内の子コンポーネントに v-model 属性をバインドすると、子コンポーネントはデフォルトで v-model にバインドされたデータに設定され、子コンポーネントの value という名前の props 属性に割り当てます。ただし、値は子コンポーネントの props で事前に宣言する必要があります。宣言しないと、値は受信されません。 値が変更されても、両方向ともすぐに親コンポーネントに返されるわけではありません。親コンポーネントのv-modelを同期的に更新したい場合は、次のようにする必要があります。 this.$emit('入力', 値) 双方向バインディングリターンのイベントが宣言されていない場合、デフォルトでは入力イベントによって返されます。なぜ「双方向バインディングリターンのイベントが宣言されていない場合」と言われているのでしょうか? これは、以下で説明する 2 番目の方法です。 簡単に言うと、これを実装する最初の方法は、まず親コンポーネントのデータを v-model にバインドし、次に子コンポーネントの値の props プロパティを自動的に受け取り、最後に this.$emit('input', value) を呼び出して、データが変更されたときに親コンポーネントに渡すことです。このようにして、親コンポーネントは、子コンポーネントの戻り値を追加で実装することなく、双方向バインディングを実現できます。 2番目の方法: 先ほど、「双方向バインディング コールバック イベントが宣言されていない場合」は、デフォルトで入力コールバックが使用されると説明しました。その場合、入力コールバックが存在します。入力を使用しない場合はどうなりますか?これには、Vue の特別なプロパティである model を理解する必要があります。このプロパティを使用して、子コンポーネントが双方向バインドされたデータを受信するために使用するフィールドと、親コンポーネント v-model のデータを更新するために使用するメソッド コールバックを宣言できます。記述方法は次のとおりです。 エクスポートデフォルト{ 名前: 'CommonCkeckBox', モデル: { プロパティ: 'チェック済み'、 イベント: 'changeCheck' }, 小道具: { チェック済み: タイプ: ブール値、 デフォルト: false、 }, // 選択状態} } この書き方は、親コンポーネントの双方向バインディング データが、checked という名前の子コンポーネントの props プロパティにバインドされ、子コンポーネントが this.$emit('changeCheck', value) を呼び出すと、親コンポーネントのデータが同期的に更新され、双方向バインディングが実現されることを意味します。 以下は参考用のカスタム チェックボックス コードです。 <テンプレート> <div class="チェックボックスコンテナ" @click="toggleCheck()" :style="{width:width,height:height}"> <div class="チェックボックスアイコン"> <!-- 3 つの状態: 選択、選択解除、無効 --> <img alt :src="`${$cdnImageUrl}/cart/icon-selected.png`" :width="幅" :height="高さ" key="選択" v-if="チェック済み&&!無効"/> <img alt :src="`${$cdnImageUrl}/cart/icon-unselected.png`" :width="幅" :height="高さ" key="未選択" v-if="!チェック済み&&!無効" /> <img alt :src="`${$cdnImageUrl}/cart/icon-unselected.png`" :width="幅" :height="高さ" class="disabled" key="未選択" v-if="disabled"/> </div> <スロット></スロット> </div> </テンプレート> <スクリプト> /** * グローバル統合ポップアップウィンドウ */ エクスポートデフォルト{ 名前: 'CommonCkeckBox', モデル: { プロパティ: 'チェック済み'、 イベント: 'changeCheck' }, 小道具: { チェック済み: タイプ: ブール値、 デフォルト: false、 }, // 選択状態が無効: { タイプ: ブール値、 デフォルト: false、 }, // 無効にするかどうか width: { タイプ: 文字列、 デフォルト: '16px'、 }, //ボタンのデフォルトの幅と高さ: { タイプ: 文字列、 デフォルト: '16px'、 }, //ボタンのデフォルトの高さ}, 作成された() { }, データ() { 戻る { } }, メソッド: { /** * 選択したポストバックを切り替える */ トグルチェック() { this.$emit('changeCheck', !this.checked) this.$emit('toggleCheck') } }, 時計: チェック済み: ハンドラ(新しい値、古い値) { //状態変更イベントを開く this.$emit('onChange') }, 深い: 本当 } }, } </スクリプト> <style lang="scss" スコープ> .チェックボックスコンテナ{ 表示: インラインブロック; .チェックボックスアイコン{ 画像{ 変換: translateZ(0); 変更内容: 自動; } 。無効{ 背景色:#f5f5f5; 境界線の半径: 50%; } } } </スタイル> 親コンポーネント: <common-checkbox v-model="item.goodsSelected" class="left" :width="'16px'" :height="'16px'"></common-checkbox> 使用する具体的な方法は、プロジェクトのシナリオによって異なります。最初の方法が要件を満たさない場合は、2 番目の方法を試すことができます。 要約する これで、v-model 双方向バインディング データを実装するための vue カスタム コンポーネントに関するこの記事は終了です。より関連性の高い vue v-model 双方向バインディング データ コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Windows 10 での MySQL 8.0.22 のインストールと設定方法のグラフィック チュートリアル
>>: HTML ハイパーリンク タグ_Powernode Java アカデミー
目次rc.local メソッドchkconfig メソッドrc.local メソッド1 まず自動的に...
概要この記事では、ゲームクライアントでよく使用される MVC アーキテクチャについて紹介します。ゲー...
実は、最近はウェブデザインについてよく耳にするようになりました。インターネット業界は今とても発展して...
目次序文インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックス...
ウェブサイトの開発とメンテナンスのコストが削減されるだけでなく、コードもよりセマンティックになります...
この記事では、ウェブページのスネークゲームを実装するためのJavaScriptの具体的なコードを参考...
公式ウェブサイトhttps://cli.vuejs.org/ja/ガイド/場合によっては、コンポーネ...
MySQLはユーザーを作成し、ユーザーの権限を承認および取り消します動作環境: MySQL 5.0...
1. 前提条件1. プロジェクトが展開されました2. Dockerはすでにインストールされている2...
目次スケルトンスクリーンとはアプレットでスケルトン画面を生成する方法導入方法表示と非表示ユーザーエク...
目次序文異なるコンピュータ上の 2 つの Node.js プロセス間の通信TCPソケットの使用HTT...
【質問】 INSERT 文は最も一般的な SQL 文の 1 つです。最近、MySQL サーバーが同時...
異なるブラウザ間でページの表示を一致させるためには、フロントエンド開発において CSS スタイルのク...
メインライブラリのバイナリログ: # 2420 で #170809 17:16:20 サーバー ID...
Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...