検索
ホームページウェブフロントエンドjsチュートリアルvue の親コンポーネントと子コンポーネント間の通信を実装する方法

今回は、vue の親コンポーネントと子コンポーネント間の通信を実装する方法と、vue の親コンポーネントと子コンポーネント間の通信を実装するための注意事項について説明します。以下は実際的なケースです。

コンポーネントは vue.js の最も強力な機能の 1 つであり、コンポーネント インスタンスのスコープは互いに独立しています。つまり、異なるコンポーネント間のデータは相互に参照できません。次に、コンポーネント間で通信する方法が Vue の重要な知識になります。この記事では、props、$ref、$emit のナレッジ ポイントを通じて、親コンポーネントと子コンポーネント間の通信を実装する方法を説明します。

通信の実装方法について説明する前に、まず例の基礎として 2 つのコンポーネント Father.vue と child.vue を構築しましょう。

//父组件
<template>
 <p>
  </p>
<h1 id="我是父组件">我是父组件!</h1>
  <child></child>
 
</template>
<script>
import Child from &#39;../components/child.vue&#39;
export default {
 components: {Child},
}
</script>
//子组件
<template>
 <h3 id="我是子组件">我是子组件!</h3>
</template>
<script>
</script>

これら 2 つの部分のコードは非常に明確です。親コンポーネントは import を通じて子コンポーネントをインポートし、それをコンポーネント属性に登録します。その後、タグ を使用して子コンポーネントを親コンポーネントに埋め込むことができます。 Father.vue を実行した後の効果は次のとおりです:

効果例 1

1. props を介して通信が行われます

子コンポーネントの props オプションは、親コンポーネントからデータを受信できます。そうです。Props は一方向にのみバインドされています。つまり、親コンポーネントから子コンポーネントにのみ渡すことができ、その逆には渡すことができません。配信方法も 2 つのタイプに分けられます:

(1) 静的配信

サブコンポーネントは props オプションを通じてカスタム属性を宣言し、親コンポーネントはこの属性をコンポーネントに渡すことができます。 子コンポーネントはデータを渡します。 。

 <!-- 父组件 -->
<template>
 <p>
  </p>
<h1 id="我是父组件">我是父组件!</h1>
  <child></child> //通过自定义属性传递数据
 
</template>
<script>
import Child from &#39;../components/child.vue&#39;
export default {
 components: {Child},
}
</script>
 <!-- 子组件 -->
<template>
 <h3 id="message">{{message}}</h3>
</template>
<script>
 export default {
  props: [&#39;message&#39;]  //声明一个自定义的属性
 }
</script>

(2) 動的転送

上記のように静的な値を props に渡すことができることはすでにわかっていますが、より多くの場合、動的データが必要になります。これは、v-bind を使用して実現できます。 v-bind を介して props のカスタム属性をバインドすると、渡されるのは静的な string ではなく、式、ブール値、オブジェクトなど、あらゆるタイプの値にすることができます。

 <!-- 父组件 -->
<template>
 <p>
  </p>
<h1 id="我是父组件">我是父组件!</h1>
  <child></child>
  <!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
  <child></child>
  <!-- 用一个变量进行动态赋值。-->
  <child></child>
 
</template>
<script>
import Child from &#39;../components/child.vue&#39;
export default {
 components: {Child},
 data() {
  return {
   a:&#39;我是子组件二!&#39;,
   b:112233,
   msg: &#39;我是子组件三!&#39;+ Math.random()
  }
 }
}
</script>
 <!-- 子组件 -->
<template>
 <h3 id="message">{{message}}</h3>
</template>
<script>
 export default {
  props: [&#39;message&#39;]
 }
</script>

効果は次のとおりです:

効果の例 2

2. 通信は $ref を通じて行われます

ref の公式の説明は次のとおりです: ref は要素またはサブコンポーネントを与えるために使用されます。情報。参照情報は親コンポーネントの$refsオブジェクトに登録されます。

理解できないですよね?当たり前のことですが、私にも理解できません。それはどのように理解すべきでしょうか?私の説明を見てください:

  1. ref がサブコンポーネントで使用される場合、それはコンポーネント インスタンスを指し、$ref を通じて、 プロパティと を取得することができます。サブコンポーネントで定義されたメソッド

  2. 通常の DOM 要素に対して ref を使用すると、$ref を通じて DOM 要素の属性コレクションを取得し、DOM 要素に簡単にアクセスできます。 JQセレクター。

$ref を介して通信を実現するにはどうすればよいですか?次に、$ref を使用して上記の prop で実装された関数を実装します。

<!-- 父组件 -->
<template>
 <p>
  </p>
<h1 id="我是父组件">我是父组件!</h1>
  <child></child>
 
</template>
<script>
 import Child from &#39;../components/child.vue&#39;
 export default {
  components: {Child},
  mounted: function () {
   console.log( this.$refs.msg);
   this.$refs.msg.getMessage(&#39;我是子组件一!&#39;)
  }
 }
</script>
 <!-- 子组件 -->
<template>
 <h3 id="message">{{message}}</h3>
</template>
<script>
 export default {
  data(){
   return{
    message:&#39;&#39;
   }
  },
  methods:{
   getMessage(m){
    this.message=m;
   }
  }
 }
</script>
上記のコードから、ref='msg' を通じて、サブコンポーネントの子のインスタンスが $ref を指すことができることがわかります。 .msg.getMessage () サブコンポーネントの getMessage メソッドを呼び出し、パラメータをサブコンポーネントに渡します。以下は、「console.log(this.$refs.msg);」によって出力される内容であり、ref を通じて得られる内容を誰もがより深く理解できるようになります:

console.log

最終的な効果は次のとおりです次のように:

効果例 3

ここでもう 1 つ追加するのは、prop と $ref の違いです:
  1. prop はデータの転送に焦点を当てており、サブコンポーネントのプロパティやメソッドを呼び出すことはできません。記事コンポーネントを作成する際にタイトルや内容をカスタマイズするなどの使用シナリオには、prop の使用が最適です。 🎜
  2. $ref 着重于索引,主要用来调用子组件里的属性和方法,其实并不擅长数据传递。而且ref用在dom元素的时候,能使到选择器的作用,这个功能比作为索引更常有用到。

3.通过$emit 实现通信

上面两种示例主要都是父组件向子组件通信,而通过$emit 实现子组件向父组件通信。

对于$emit官网上也是解释得很朦胧,我按我自己的理解是这样的:

vm.$emit( event, arg )

$emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数。

<template>
 <p>
  </p>
<h1 id="title">{{title}}</h1>
  <child></child>
 
</template>
<script>
 import Child from &#39;../components/child.vue&#39;
 export default {
  components: {Child},
  data(){
   return{
    title:&#39;&#39;
   }
  },
  methods:{
   showMsg(title){
    this.title=title;
   }
 }
 }
</script>
<template>
 <h3 id="我是子组件">我是子组件!</h3>
</template>
<script>
 export default {
  mounted: function () {
   this.$emit(&#39;getMessage&#39;, &#39;我是父组件!&#39;)
  }
 }
</script>

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎样使用nodejs express配置自签名https服务器

怎样用mpvue构建小程序

以上がvue の親コンポーネントと子コンポーネント間の通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター