Vue2.0でデータの双方向バインディング機能をjsを使って実装する

Vue2.0でデータの双方向バインディング機能をjsを使って実装する

Object.definePropertyの理解

文法:

オブジェクト.defineProperty(obj, prop, 記述子)

  • obj プロパティを定義するオブジェクト。
  • prop 定義または変更するプロパティの名前
  • 記述子 定義または変更するプロパティ記述子

objとpropは簡単に理解できます。例えば、変数を次のように定義します。

定数o = {
    名前:'xbhog'
}

このうち、objはoを参照し、propはo.nameを参照します。次に、記述子を見てみましょう。

記述子 対象オブジェクトの属性のいくつかの特性(オブジェクトである)
記述子の下には6つのパラメータがあります
パラメータ1:
値: 属性値
パラメータ2:
書き込み可能: オブジェクトのプロパティ値を変更できるかどうか。True の場合は許可されます。False の場合は許可されません。
パラメータ3:
configurable: オブジェクト プロパティを削除できるかどうか。True の場合は許可されます。False の場合は許可されません。
パラメータ4:
enumerable: オブジェクトプロパティを列挙できるかどうか
パラメータ5:
get(): は関数です。プロパティにアクセスすると、関数が自動的に呼び出され、関数の戻り値がプロパティの値になります。
パラメータ6:
set(): プロパティが変更されたときに自動的に呼び出される関数です。この関数には、割り当てられる新しい値が1つだけあります。

注意: 記述子内の値属性、書き込み可能属性、および取得属性、設定属性は相互に排他的です。存在できるのは 1 つだけです。

前提条件を理解した上で、Vueでv-modelの双方向バインディングを実装してみましょう。

まず実装コードを見てみましょう。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>js による双方向データバインディングを実現する</title>
</head>
<本文>
    
<input type="text"/><br>
<h1>こんにちは: <span>データの更新</span></h1>


<!-- js を通じて双方向データバインディングを実現する -->
<スクリプト>
	// メソッドは、指定されたセレクターまたはセレクター グループに一致するドキュメント内の最初の HTMLElement オブジェクトを返します。var ipt = document.querySelector('input');
    var p = document.querySelector('span');
	
	
    var データ = {名前:""};
	/* 
	    oninput イベントは、ユーザーが何かを入力したときにトリガーされます。
	    このイベントは、<input> または <textarea> 要素の値が変更されたときにトリガーされます。
	 */
    ipt.oninput = 関数(){
	// ipt.value の値を data.name の値に渡します
        データ名 = ipt.値;
    }
    //ipt.value をハイジャックする
    Object.defineProperty(データ、名前、{
    //データサブスクリプション get(){
        return ipt.value; //アクセス時にgetメソッドが呼び出されます},
    //データハイジャック //name:value
    設定(値) {
        p.innerHTML = 値;
        ipt.value = 値;
    }   
})
</スクリプト>
</本文>
</html>

まず、document.querySelector を使用して input タグと span タグの HTML オブジェクトを取得し、属性名が空のデータ オブジェクトを定義します。

oninput イベント リスナーを使用して、ユーザー入力を監視します (このイベントは、<input> または <textarea> 要素の値が変更されたときにトリガーされます)。

ipt.value の値を data.name の値に渡します。

データ名 = ipt.値;

Object.defineProperty を使用して、ユーザー入力データを乗っ取ります。

  • get attribute: 関数です。属性にアクセスすると関数が自動的に呼び出され、関数の戻り値が属性の値になります。
  • set property: は関数です。プロパティが変更されると、関数が自動的に呼び出されます。関数には、割り当てられる新しい値という 1 つのパラメーターのみがあります。
Object.defineProperty(データ、名前、{
    //データサブスクリプション get(){
       return ipt.value; //data.nameにアクセスすると、getメソッドが呼び出され、ipt.valueを呼び出して現在の値を取得します},
    // データハイジャック set(value) { // データを設定するときにsetメソッドが自動的に呼び出されます p.innerHTML = value;
        ipt.value = 値;
    }

効果はより明白です:

設定方法:

取得方法:

最終的な効果:

参考文献:

  • https://blog.csdn.net/Doulvme/article/details/107978012
  • https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelector
  • https://www.jianshu.com/p/6f589af16ad4
  • //www.jb51.net/article/217657.htm (推奨)

要約する

これで、js を使用して Vue2.0 で双方向データバインディング機能を実装する方法についての記事は終了です。js を使用して Vue2 双方向バインディングを実装することに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • v-model 双方向バインディングデータを実装する vue カスタム コンポーネントのサンプル コード
  • Vue2.x における双方向バインディングの原理と実装
  • フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングの実装
  • Vue の双方向イベントバインディング v-model の原理についての簡単な説明
  • 純粋な JS を使用して vue.js で双方向バインディング機能を実装する方法
  • Vue双方向バインディングの詳細な説明

<<:  docker ログが取得できない問題の解決方法

>>:  MySql 8.0.16 バージョンのインストールでは、「UTF8B3」ではなく「UTF8B4」が使用されるように求められます。

推薦する

CentOS 7 で MySQL 5.7 をインストールして設定する

この記事では、以下の環境をテストします。 CentOS 7 64 ビット 最小 MySQL 5.7 ...

Linux ファイル記述子、ファイルポインタ、および inode の詳細

目次Linux - ファイル記述子、ファイルポインタ、インデックスノード1. Linux - ファイ...

Vue ルーティング this.route.push ジャンプ ページが更新されない場合の解決策

Vue ルーティング this.route.push ジャンプ ページが更新されない1. 背景概要:...

JS の new 関数の詳細な説明

目次1. 例2. 兵士100人を作成する3. 質問4. 改善点5. エレガント? 6. JSの父から...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

MySQLはストアドプロシージャを使用して数百万のデータを素早く追加します。サンプルコード

序文インデックスを追加した場合と追加しなかった場合の違いを反映するには、数百万のデータを使用する必要...

Mybatis mysqlの削除操作では、最初のデータメソッドのみを削除できます。

バグ図のように、削除文とパラメータをデータベースにコピーして実行し、2つのデータを削除しようとしたの...

WIN2008 サーバーのコマンド ラインを使用して IIS7 コンポーネントをインストールおよびアンインストールする方法

注意: .NET FrameWork はコア モードで実行できないため、コア インストール モードの...

JavaScript でフロントエンドのカウントダウン効果を実装する

この記事では、フロントエンドのカウントダウン効果を実現するためのJavaScriptの具体的なコード...

cobbler ベースの Linux システムを自動的にインストールする

1. コンポーネントをインストールする yum install epel-rpm-macros.no...

Docker データ ストレージ tmpfs マウントの詳細な説明

この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...

1 つ以上の Linux インスタンスから SSH キー ペアのバインドを解除します。

キーペアの分離1 つ以上の Linux インスタンスから SSH キー ペアのバインドを解除します。...

CSS で雨滴アニメーション効果を実装するサンプルコード

ガラス窓今日実現するのは雨滴効果です。ただし、雨滴効果を実現する前に、まずは曇りガラス効果を作成しま...

VMware 仮想マシンでの CentOS7 ネットワーク構成 (ホストのワイヤレス インターネット アクセス)

CentOS7 システムを使用するのは今回が初めてで、ネットワーク構成を行う際に多くの問題が発生し...