プロジェクトでは、プロジェクトが呼び出すカスタム パブリック コンポーネントに遭遇します。通常、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 アカデミー
目次1. 関数シグネチャ2. 関数のオーバーロード2.1 オーバーロードされたシグネチャは呼び出し可...
目次1. EclipseがTomcatを構成する2. Tomcat の無効なポートの解決方法方法1:...
1.テーブル全体を更新します。データ行の列の値が空の場合は、別の列フィールドの値と同じにします。 ...
目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...
同じサーバーで、Docker を使用して Mysql のマスター スレーブ同期設定をシミュレートしま...
ローカル環境はWindows10+WSL2(Ubuntu)です。サーバーにDockerをインストール...
目次1. 二重連結リストとは何か2. 双方向リンクリストのカプセル化3. 双方向リンクリストの一般的...
目次運河マクスウェルデータバスAlibaba Cloud のデータ転送サービス (DTS)運河ポジシ...
SpringBoot は巨大な Python のようで、ゆっくりと私たちの周りを巻きつき、麻痺させま...
目次1. マスタースレーブ同期原理マスタースレーブ同期アーキテクチャ図(非同期同期)マスタースレーブ...
1. MySQLイメージを取得するターミナルから最新のMySQLイメージを取得するdocker pu...
Dockerコンテナのマウントディレクトリ情報のみを表示する docker 検査 --format ...
CocosCreatorがスキルCD効果を実現多くのゲームにはスキルがあります。プレイヤーがスキルボ...
いつものように、まずは画像効果を投稿しましょう: このエフェクトの原理は非常にシンプルです。CSS3...
<a href="" onclick=""> を...