プロジェクトでは、プロジェクトが呼び出すカスタム パブリック コンポーネントに遭遇します。通常、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 アカデミー
最近、オンライン セキュリティ スキャンにより、MySQL コネクタに脆弱性が見つかりました。確認し...
JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...
WEB開発は主に2つのインタラクション(B/Sデータ)から構成されますブラウザ: 1html、css...
序文コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイル...
MySQL の MyISAM エンジンと InnoDB エンジンはどちらもデフォルトで B+ ツリー...
Dockerのインストール1. 要件: Linuxカーネルバージョン3.10以上 表示: uname...
序文すでに Docker をインストールしており、Docker について簡単に理解しています。ここで...
目次MySQLをインストールする環境変数の設定MySQLをインストールするmysqlをダウンロードし...
ウェブサイトやサービスのパフォーマンスは、データベースの設計(適切な言語開発フレームワークを選択した...
目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...
目次更新可能なビュービューのパフォーマンスビューの制限ビューは MySQL 5.0 以降で導入されま...
ヒントこのプラグインは https プロトコルでのみアクセスできます。http プロトコルはうまく機...
目次1. コンセプト1.1 エラーと例外とは何ですか? 1.2 異常の分類2. 例外処理2.1try...
序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...