1. 親コンポーネントと子コンポーネントの関係この記事では、Vue における親コンポーネントと子コンポーネント間の通信方法についてまとめます。 では、Vue では親コンポーネントと子コンポーネントの関係はどのように構築されるのでしょうか。また、どのコンポーネントを親コンポーネントと呼び、どのコンポーネントを子コンポーネントと呼ぶことができるのでしょうか。 私の理解では、親コンポーネントと子コンポーネントの関係も比較的単純です。 vue-cli ツールを使用して構築されたプロジェクトでは、1 つのコンポーネントに別のコンポーネントへの参照を登録することがよくあります。 ホーム.vue <テンプレート> <div class="home"> <p>これはホームコンポーネントです</p> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'ホーム' } </スクリプト> <スタイルスコープ> 。家{ 境界線:1px 実線 #4488ff; 表示: インラインブロック; パディング: 10px; } </スタイル> アプリ.vue <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <!-- stpe3: 使用 --> <ホーム></ホーム> </div> </テンプレート> <スクリプト> // ステップ1: './components/Home' から Home をインポートします エクスポートデフォルト{ 名前: 'アプリ'、 // ステップ2: コンポーネントを登録する: { ホーム } } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; 色: #2c3e50; 表示: インラインブロック; border:1px オレンジ一色; パディング: 10px; } </スタイル> 上記 2 つのコンポーネントでは、App コンポーネントに Home コンポーネントを導入し、登録して使用しました。 Vue では、App コンポーネントを親コンポーネント、Home コンポーネントを子コンポーネントと呼ぶことができます。これら 2 つのコンポーネントは親子関係を形成します。 ここで注目すべきは、導入、登録、利用という3つのステップが不可欠であるということです。 そうしないと、2 つのコンポーネントは親子関係を形成できず、後述するいくつかの通信方法を使用して通信することもできません。 Vue における親子コンポーネントの構成関係を理解した後、親子コンポーネントが相互に通信する方法について説明します。 2. 小道具Vue で親子コンポーネントが通信する最初の方法は props 属性を使用することで、親コンポーネントが子コンポーネントと通信します。 実践してみましょう。 まず、親コンポーネント内で子コンポーネントが使用されている場所を見つけ、親コンポーネントが子コンポーネントに渡す必要があるデータを追加します。 App.vue (変更されていないコードの一部は省略) <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <ホーム タイトル="Vue における親コンポーネントと子コンポーネント間の通信方法" 2020/03/05 14:25 更新 </ホーム> </div> </テンプレート> ご覧のとおり、このステップでは、サブコンポーネントが使用されるサブコンポーネントに渡す必要がある 2 つのデータ (タイトルと日付) を追加しました。 <ホーム タイトル="Vue における親コンポーネントと子コンポーネント間の通信方法" 2020/03/05 14:25 更新 </ホーム> 次のステップでは、子コンポーネントで props を使用して、これら 2 つのパラメータを受け取ります。 Home.vue (変更されていないコードの一部は省略) <スクリプト> エクスポートデフォルト{ 名前: 'ホーム'、 プロパティ: ['タイトル', '日付'] } </スクリプト> 最後のステップでは、vue データを使用する場合と同じように、子コンポーネントでタイトルと日付を使用できます。 Home.vue (変更されていないコードの一部は省略) <テンプレート> <div class="home"> <p>これがホームコンポーネントです</p> <p>タイトル:{{タイトル}}</p> <p>日付:{{date}}</p> </div> </テンプレート> プロジェクトを開始したら、ブラウザで効果を確認します。 3. $エミットVue における親子コンポーネント通信の 2 番目の方法は、子コンポーネントと親コンポーネント間の通信である $emit メソッドを使用することです。 $emit メソッドは Vue のインスタンス メソッドであり、その使用方法は次のとおりです。 最初のパラメータ eventName はイベント名と呼ばれます。 イベント名に対応するイベントは、親コンポーネントの v-on がリッスンするネイティブ DOM イベントです (クリックのようなカスタム イベントとして理解できます)。 子コンポーネントで $emit(eventName) を実行すると、親コンポーネントの対応するイベントがトリガーされます。 したがって、最初に子コンポーネントの $emit メソッドを使用して、親コンポーネントでイベントをトリガーするコードを記述します (2 番目のパラメーターを渡さずに)。 ホーム.vue <テンプレート> <div class="home"> <p>これはホームコンポーネントです</p> <el-button type="primary" v-on:click='btnClickHandler("Yes")'>はい</el-button> <el-button type="primary" v-on:click='btnClickHandler("No")'>いいえ</el-button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'ホーム'、 メソッド: { btnClickHandler: 関数(パラメータ){ if(パラメータ == "はい"){ これを$emit('sayYes'); }それ以外の場合(パラメータ == "いいえ"){ this.$emit('sayNo'); } } } } </スクリプト> ご覧のとおり、Home サブコンポーネントには 2 つのボタンがあります。 [はい] ボタンをクリックすると、 this.$emit('sayYes') が実行され、親コンポーネントで sayYes イベントがトリガーされます。 [いいえ] ボタンをクリックすると、this.$emit('sayNo') が実行され、親コンポーネントで sayNo イベントがトリガーされます。 次に、親コンポーネントに対応するネイティブ DOM イベントを実装します。 アプリ.vue <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <ホーム v-on:sayYes='val="はい"' v-on:sayNo='val="no"'> </ホーム> <p>値: {{val}}</p> </div> </テンプレート> <スクリプト> './components/Home' から Home をインポートします。 エクスポートデフォルト{ 名前: 'アプリ'、 データ() { 戻る { 値: "デフォルト", } }, コンポーネント: { ホーム }, } </スクリプト> このうち、 sayYes と sayNo は親コンポーネントで定義されたネイティブ DOM イベントです。 <ホーム v-on:sayYes='val="はい"' v-on:sayNo='val="no"'> </ホーム> val は親コンポーネントで定義されたデータであり、そのデフォルト値は 'default' です。 次に、サブコンポーネントのコード ロジックと組み合わせると、次の結果が得られることがわかります。 [はい] ボタンをクリックすると、 this.$emit('sayYes') が実行され、親コンポーネントで sayYes イベントがトリガーされます。 sayYes イベントでは、vue データ内の val 値が yes に変更されます。 [No] ボタンをクリックすると、this.$emit('sayNo') が実行され、親コンポーネントで sayNo イベントがトリガーされます。sayNo イベントでは、vue データ内の val 値が no に変更されます。 ブラウザで当社の声明を確認してください。 IV. $親$parent は Vue のインスタンス プロパティであり、現在のコンポーネントの親インスタンスを表します。 親コンポーネントに sayYes というメソッドがある場合は、子コンポーネントで this.$parent.sayYes を直接使用して、親コンポーネント メソッドを呼び出すことができます。 アプリ.vue <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <ホーム></ホーム> <p>値: {{val}}</p> </div> </テンプレート> <スクリプト> './components/Home' から Home をインポートします。 エクスポートデフォルト{ 名前: 'アプリ'、 データ() { 戻る { 値: "デフォルト", } }, コンポーネント: { ホーム }, メソッド: { 言うはい: 関数() { this.val = "はい"; }, いいえと言う: 関数() { this.val = "いいえ"; } } } </スクリプト> 親コンポーネントに sayYes と sayNo という 2 つのメソッドを定義しました。それぞれのロジックは、val の値を yes に変更し、val の値を no に変更します。 次に、子コンポーネントで this.$parent.sayYes と this.$parent.sayNo を使用して、親コンポーネントの対応する sayYes メソッドと sayNo メソッドを呼び出すことができます。 ホーム.vue <テンプレート> <div class="home"> <p>これはホームコンポーネントです</p> <el-button type="primary" v-on:click='btnClickHandler("Yes")'>はい</el-button> <el-button type="primary" v-on:click='btnClickHandler("No")'>いいえ</el-button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'ホーム'、 メソッド: { btnClickHandler: 関数(パラメータ){ if(パラメータ == "はい"){ this.$parent.sayYes(); }それ以外の場合(パラメータ == "いいえ"){ this.$parent.sayNo(); } } } } </スクリプト> 子コンポーネントの btnClickHandler メソッドのコードが this.$parent に変更されました。 それでは結果を見てみましょう。 V. 結論ここまでで、Vue における親子コンポーネントの通信方式がまとめられ、それぞれ以下の方式がまとめられました。 1つ目: 親コンポーネントが子コンポーネントと通信する - props属性 2番目の方法: 子コンポーネントが親コンポーネントと通信する - $emit メソッド 3番目のタイプ: 子コンポーネントは親コンポーネントと通信します - $parent属性 以上が、Vue を使って親子コンポーネント通信を実現する方法の詳細です。Vue 親子コンポーネント通信の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CentOS で LibreOffice を使用してドキュメント形式を変換する方法
>>: MySQL 8.0.11 圧縮バージョンを Windows 10 にインストールするための詳細なチュートリアル
バイナリ docker 19.03 バージョンがインストール後に docker0 ブリッジを自動的に...
1. ページ要件1) 標準のヘッダーとフッターを使用するXML/HTML コードコンテンツをクリップ...
<!DOCTYPE html> <html lang="ja"...
目次1. 開発環境2. dockerプラグインをインストールする1. アイデアのインストール2. イ...
今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...
この記事では、検証コード干渉を実装するためのjsの具体的なコードを参考までに共有します。具体的な内容...
数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...
序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...
はじめに: MySQL では、CONCAT() 関数を使用して複数の文字列を 1 つの文字列に連結し...
CentOS7 のデフォルトのデータベースは mariadb ですが、mysql を使っている人も多...
データベースマルチテーブル接続クエリの実装方法の詳細説明結合演算子を使用して複数のテーブルクエリを実...
目次序文1. 少ない2. コンポーネントをインポートする3. 設定ファイルを変更するステップ1: l...
1. mpstatコマンド1.1 コマンド形式 mpstat [ -A ] [ -u ] [ -V ...
DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...
CSS 属性セレクターは素晴らしいです。大量のクラス名を追加することを回避し、コード内の問題を指摘す...