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 ファイルとユーザー管理の実践

推薦する

MySql 5.7.21 無料インストール バージョンの構成方法 (Win10 の場合)

1.インストールしたい場所に解凍し、my.iniファイルを作成します。 my.iniの内容は次のと...

インターフェースなしで Centos7 に JDK と Tomcat をデプロイするチュートリアル

1. xshell6をインストールする2. サーバー接続を作成し、ユーザー名とパスワードを入力します...

Vue3 親子コンポーネントパラメータ転送における sync 修飾子の使用法の詳細な説明

目次一方向データフローの説明Vue2.x の使用法親コンポーネントに変更を通知するイベントのフォーム...

Linux で time(NULL) 関数と localtime() を使用して現在の時刻を取得する方法

time(); 関数関数プロトタイプ: time_t time(time_t *timer)関数の目...

Docker Compose を使用して Confluence を構築するチュートリアル

この記事は「Attribution 4.0 International (CC BY 4.0)」ライ...

すべてのホストがmysqlにアクセスできるようにする方法

1. MySQLデータベースのユーザーテーブルのレコードのHostフィールド値を%に変更します。奇妙...

CSS は Alibaba ベクター ライブラリを使用して、対応する位置に見栄えの良いアイコン効果をすばやく追加します (サンプル コード)

Alibaba ベクターアイコンライブラリにアクセスAlibaba ベクターアイコンライブラリ好き...

Navicateを使用してAlibaba Cloud Server上のMySQLに接続する

1. まず、サーバーの mysql にアクセスして権限を変更します。 GRANT オプション付きで、...

JavaScript 配列メソッドの詳細な例

目次導入配列の作成作成方法詳しい説明方法参加する() push() と pop() shift() ...

Tomcat の文字化けしたコードとポート占有の解決方法について簡単に説明します

Tomcat サーバーは、無料でオープン ソースの Web アプリケーション サーバーです。軽量のア...

MySQL でレプリケーション フィルターを動的に変更する方法

MySQLはレプリケーションフィルターを動的に変更します今日遭遇した問題についてお話しします。今日は...

K8Sの5つのコントローラーの紹介と使用

目次k8sのコントローラータイプポッドとコントローラの関係デプロイメント(ステートレスアプリケーショ...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

ネットワークセグメント内の IP アドレスに対する Nginx の接続制限設定の詳細な説明

Nginx におけるいわゆる接続制限は、実際には TCP 接続、つまり 3 ウェイ ハンドシェイク後...

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...