フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングの実装

フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングの実装

実装のアイデア:

親コンポーネントから子コンポーネントに値を渡すには、 props属性を使用します。 ( props propertyの複数形の略語です )
子コンポーネントから親コンポーネントに値を渡すには、カスタム イベントを使用します。

1. 親コンポーネントと子コンポーネント間の一方向の値転送

1. 親から子への値の受け渡し

親は子コンポーネントに値を渡し、子コンポーネントはデータを受け取った後、それを独自の変数に保存します。

//親コンポーネントの書き込み方法 <cld :numP="num" ></cld> 
 
//サブコンポーネントの定義とデータコンポーネント:{ 
 終了:{ 
  テンプレート:'#child', 
  小道具:{ 
   numP:数値 
  }, 
 } 
} 
 
//サブコンポーネントコンテンツ <template id="child"> 
 <div> 
  {{ numP }} 
 </div> 
</テンプレート> 


Props は、親コンポーネントから渡された値を受け取るために使用されます。props の記述方法は、次のように多数あります。

//方法 1: データを直接受信する props: ['numP'] 
 
//方法2: 型制限プロパティを追加する: [ 
 numP: 数値 
 ]  
 
//方法3: デフォルト値のプロパティを追加する: [ 
 数値P: { 
  タイプ:数値、 
  デフォルト:0 
  } 
]  
 
//方法4: propsの値を制限する必要があるか: [ 
 数値P: { 
  タイプ:数値、 
  デフォルト:0、 
  require:true // 必要な値を追加します。追加しない場合はエラーが報告されます} 
]  
 
//方法5: オブジェクトフォームプロパティの使用: { 
 数値P: { 
  タイプ:数値、 
  デフォルト:0、 
 } 
} 

2. 子から父への価値の継承

子は主にカスタムイベントを通じて親コンポーネントに値を渡します。具体的な例は以下のとおりです。

// 親コンポーネントのコンテンツ <div> 
 子コンポーネントによって取得されるデータは {{getNum}} です 
 <cld :numb="num" @accept="getNumC"></cld> 
</div> 
 
//親コンポーネントメソッド メソッド:{ 
 getNumC(データ){ 
  this.getNum = data //子コンポーネントからデータを受け取る} 
}, 
//サブコンポーネント定義コンポーネント:{ 
 終了:{ 
  テンプレート:'#child', 
  データ(){ 
   戻る { 
    numC:1314 //サブコンポーネントデータ定義} 
  }, 
  マウントされた(){ 
    this.$emit('accept', this.numC) // カスタムイベントをトリガーする} 
  } 
}, 

2. 親子コンポーネントデータの双方向バインディング

Vueのデータは一方向に流れ、 vueには双方向バインディングは存在しません。 v-modelによって実装された双方向バインディングは単なる構文上の糖衣です。

方法 1: watchを使用して、親コンポーネントと子コンポーネント間の双方向データ バインディングを実装します。具体的な例は次のとおりです。

<div id="アプリ"> 
 データ<br>{{num}} 
 <input type="text" v-model="num"><br> 
 <cld :numb="num" @accept="getNumC"></cld> 
</div> 
//サブコンポーネントコンテンツ <template id="child"> 
 <div> 
  データ<br>{{childNum}} 
  <input type="text" v-model="childNum" /> 
 </div> 
</テンプレート> 
 
  <!-- 親子コンポーネントの通信 --> 
constアプリ = 新しいVue({ 
 el:'#app', 
  データ:{ 
   番号:'520', 
   }, 
  方法:{ 
   getNumC(データ){ 
    this.num = データ 
   } 
  }, 
  コンポーネント:{ 
   終了:{ 
    テンプレート:'#child', 
    小道具:{ 
     数値:文字列 
    }, 
   データ(){ 
    戻る { 
     子番号:0, 
    } 
   }, 
  時計:{ 
   数値:関数(){ 
    this.childNum = this.numb 
   }, 
   子番号:関数(){ 
    this.$emit('accept',this.childNum) 
    } 
   }, 
  マウントされた(){ 
   this.childNum = this.numb 
   } 
  } 
 }  
}) 


方法2:双方向バインディングを実現するためのsync修飾子

vue 1.x の .sync 修飾子によって提供される機能。子コンポーネントが .sync を使用してプロパティの値を変更すると、その変更は親コンポーネントにバインドされた値にも同期されます。これは便利ですが、一方向のデータフローが中断されるため、問題が発生する可能性もあります。 (データは上から下へ流れ、イベントは下から上へ流れます)

<cld :numb.sync="num" ></cld> 
// は次のように展開されます: 
<cld :numb="bar" @update:numb="val => bar = val"/> 


コンポーネントが numb の値を更新する必要がある場合は、更新イベントをトリガーする必要があります。

this.$emit("update:numb", newValue ); 


具体的な使用例は以下の通りです。

// 親コンポーネント <Father :foo.sync="foo"></Father> 
 
//子コンポーネントのプロパティ: ['foo'], 
データ() { 
  戻る { 
   新しいFoo: this.foo; 
   } 
}, 
方法:{ 
 追加:関数(){ 
  this.newMsg=10; 
  this.$emit('update:foo',this.newFoo); 
 } 
} 

フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングに関するこの記事はこれで終わりです。Vue における親子コンポーネントデータの双方向バインディングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  MySQL の詳細な単一テーブルの追加、削除、変更、クエリの CRUD ステートメント

>>:  Docker が elasticsearch を起動するときのメモリ不足の問題と解決策

推薦する

MySQL の undo、redo、binlog の違いを簡単に分析します

目次序文【ログ取り消し】 【REDOログ】 【バイナリログ】要約する序文MySQL には、REDO ...

Maven で tomcat8-maven-plugin プラグインを使用する詳細なチュートリアル

オンラインで多くの記事を検索しましたが、解決策は見つかりませんでした。次のように、tomcat7-m...

MYSQL ストアドプロシージャと関数の簡単な記述

ストアドプロシージャとは簡単に言えば、これは強力で、JAVA 言語のメソッドに似た比較的複雑な論理関...

Linuxのtopコマンド出力の詳細な説明

序文皆さんは Linux で top コマンドを使ったことがあると思います。私は Linux に触れ...

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...

高性能なウェブサイトのための14のテクニック

オリジナル: http://developer.yahoo.com/performance/rule...

JavaScript でのプロキシの使用を理解するための記事

目次エージェントとは何かプロキシの基礎知識ハンドラオブジェクトのメソッドプロキシでできること参考文献...

Vueの子コンポーネントと親コンポーネントの詳細な分析

目次1. 親コンポーネントと子コンポーネント2. テンプレート分離書き込み1. テンプレートタグ2....

HTML リンク アンカー タグと SEO におけるその役割の概要

<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...

HTML に画像が存在しない場合にデフォルトの画像を表示する方法の例

画像リンク <img src="" /> jsを使用してURLが有効...

CSSは親コンテナのdivをimg画像で埋め、コンテナのサイズに適応します。

ページに複数の画像を導入すると、画像のサイズがばらつくことがあります。しかし、それらを一貫したサイズ...

uniapp WeChatミニプログラムのグローバル共有を実装するためのサンプルコード

目次グローバル共有コンテンツファイルを作成するファイルをインポートしてグローバルに登録するページ共有...

ノードでシェルスクリプトを使用する方法

背景開発中、特定の状況でビジネス ロジックをバッチ処理するためのスクリプトが必要になる場合があります...

phpstudy から Linux への MySQL の移行に関するチュートリアル

プロジェクトの目的元のWindows環境でphpstudyを使用して構築されたMySQL 5.5.5...

mysql8.0.20 のダウンロードとインストールおよび発生した問題 (図とテキスト)

1.ブラウザでmysqlを検索してダウンロードしてインストールしますアドレス: https://d...