Vue の双方向イベントバインディング v-model の原理についての簡単な説明

Vue の双方向イベントバインディング v-model の原理についての簡単な説明

DOM を直接変更して操作する js や jQuery とは異なり、Vue は v-model を使用してデータの双方向バインディングを実装します。コントロールの種類に応じて、要素を更新するための適切な方法を自動的に選択します。

v-model は Vue の双方向バインディング命令であり、ページ上のコントロール入力の値を関連するバインドされたデータ属性に同期的に更新したり、データバインディング属性を更新するときにページ上の入力コントロールの値を更新したりすることができます。

公式ドキュメントでは次のように説明されています。

v-modelは単なる構文糖であり、実際の実装は

  • v-bind: レスポンシブデータをバインドする
  • 入力イベントをトリガーしてデータを渡す(コアとフォーカス)

次のコード

<input v-model="txt"> 

本質的に

<input :value="txt" @input="txt = $event.target.value">

説明する:

vueインスタンスが初期化されると、データの各プロパティが再帰的に走査され、各プロパティのgetメソッドとsetメソッドがdefinePropertyを通じて監視されるため、プロパティが再割り当てされると、変更を監視して対応するページコントロールを操作できます。

以下のコードを見てください。

Object.defineProperty(データ、名前、{
        得る(){
            データ["name"]を返します。
        },
        set(newVal){
            val = data["name"]とします。
            場合 (val === newVal) {
                戻る;
            }
            データ["名前"]=newVal;
            // 属性値の変更をリッスンします。ノードが対応する入力ノードの場合、node.value=newVal;
        }    
    })

要約する

一方、モーダル レイヤーは Object.defineProperty を通じて各プロパティをハイジャックし、変更が検出されると、関連するページ要素を通じて更新されます。一方、テンプレートファイルをコンパイルすることで、入力イベントがコントロールのv-modelにバインドされ、ページ入力は関連するデータ属性値をリアルタイムで更新できるようになります。

Object.defineProperty は、読み取りおよび書き込み権限や列挙の可否など、オブジェクトのプロパティの特別な操作を制御するために使用されます。ここでは、主に、対応する 2 つの説明プロパティ get と set について学習します。v-model は、実際に get および set 操作を書き換えます。get は、name 属性の値を読み取ることによってトリガーされる関数であり、set は、name 属性の値を設定することによってトリガーされる関数です。

補充する

v-model 修飾子: .lazy、.trim、.number

lazy: 各入力イベントがトリガーされた後、入力ボックスの値がデータと同期され、lazy修飾子が追加されて、同期に変更イベントを使用するように変換されます。

<input v-model.lazy="msg">

トリム: 文字列の先頭と末尾からスペースを削除します

<input v-model.trim="msg">

数値: データを値型に変換する

<input v-model.number="msg">

Vue の双方向イベントバインディング v-model の原理に関するこの記事はこれで終わりです。Vue の双方向イベントバインディング v-model に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VUEのデータプロキシとイベントの詳細な説明
  • Vue の動的コンポーネントとグローバル イベント バインディングの概要の詳細な説明
  • Vue フィルターの使用とタイムスタンプ変換の問題
  • Vue フィルターの実装と適用シナリオの詳細な説明
  • Vue のデータとイベントのバインディングとフィルターの詳細な説明

<<:  Mysql の大きな SQL ファイルの高速リカバリ ソリューションの共有

>>:  Linux ファイルとユーザー管理の実践

推薦する

Linuxサービスの監視と運用および保守

目次1. psutilパッケージをインストールする次に、オペレーティングシステム内のすべてのサービス...

マインスイーパゲームを実装するための jQuery プラグイン (3)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する方法に関する3番目の記事...

Javascript実践におけるコマンドモードの詳しい説明

目次意味構造例カスタムショートカットキー元に戻すとやり直し録音と再生マクロ要約する意味リクエストをオ...

ウェブフロントエンドに対する一般的な攻撃とその防止方法

ウェブサイトのフロントエンド開発で発生するセキュリティ問題は、クライアントブラウザで実行されるコード...

現在のブラウザが JavaScript でヘッドレス ブラウザであるかどうかを検出する方法

目次ヘッドレスブラウザとは何ですか?なぜ「ヘッドレス」ブラウザと呼ばれるのでしょうか?ヘッドレスブラ...

ova ファイルを VMware にインポートする際の落とし穴の概要

問題の原因ご存知のとおり、すべてのネットワーク動作は対応するネットワークトラフィックを生成し、すべて...

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

Windows 10 での MySQL 5.7.21 インストーラのインストール グラフィック チュートリアル

MySQLをインストールしてメモしておきます。うまくインストールできるか分かりませんが、試してみます...

nginx をベースにした Web クラスター プロジェクトをすばやく構築する方法を説明します。

目次1. プロジェクト環境2. プロジェクトの説明3. プロジェクトの手順1. インストール2. 構...

HTML シンボルからエンティティへのアルゴリズムのチャレンジ

チャレンジ:文字列内の文字 &、<、>、" (二重引用符)、および &...

JSの矢印関数におけるこのポイントの詳細な説明

矢印関数は ES6 の新機能です。独自の this はありません。その this ポイントは外部のコ...

Linux での i3 ウィンドウ マネージャーの設定と使用に関するチュートリアル

この記事では、Fedora 28 に i3 をインストールして簡単に設定する方法を説明します。 1....

MySQL マスターとスレーブの不整合とその解決策の詳細な説明

1. MySQL マスタースレーブ非同期1.1 ネットワーク遅延MySQLのマスタースレーブレプリケ...

CSS3 オーバーフロープロパティの説明

1. オーバーフローOverflow はオーバーフロー(コンテナ)です。コンテンツがコンテナを越える...

CSS スタイルの優先順位とカスケード順序に関する議論

一般的に: [重要なフラグ1つ] > [特別なフラグ4つ] > 宣言順!importan...