検索
ホームページウェブフロントエンドjsチュートリアルVue コンポーネント通信 (詳細なチュートリアル)

Vue コンポーネント通信 (詳細なチュートリアル)

Jun 07, 2018 am 11:52 AM
vuevueコンポーネント通信コンポーネント

この記事では主に、親子コンポーネントの通信、親子コンポーネントのeventBus通信、localStorageまたはsessionStorageの使用、Vuexの使用の4つの方法を紹介します。必要な友達は参考にしてください。 . 勉強して勉強してください。

はじめに

ご存知のとおり、vue は jquery と比較した場合の最大の違いの 1 つはコンポーネント間の通信です。この記事の焦点は、最初の 2 つである親子コンポーネント通信と EventBus 通信を整理することです。Vue ドキュメントの指示はまだ少し単純で、最初は理解できませんでした。

  • 親子コンポーネントの通信

  • 親子以外のコンポーネントのイベントバス通信

  • ローカルキャッシュを使用してコンポーネント通信を実装

  • Vuex通信

通信方法: 親子コンポーネントの通信

親コンポーネントは子コンポーネントにデータを渡します

親コンポーネントは合計4つのことを行う必要があります

1.import Son from './son.js ' 子コンポーネントsonを導入しますimport son from './son.js' 引入子组件 son

      2.在components : {"son"} 里注册所有子组件名称

      3.在父组件的template应用子组件, <son></son>

      4.如果需要传递数据给子组件,就在template模板里写 <son :num="number"></son>

 // 1.引入子组件 
 import counter from &#39;./counter&#39;
 import son from &#39;./son&#39;
// 2.在ccmponents里注册子组件
 components : {
 counter,
 son
 },
// 3.在template里使用子组件
 <son></son>
 // 4.如果需要传递数据,也是在templete里写
 <counter :num="number"></counter>

子组件只需要做1件事

      1.用props接受数据,就可以直接使用数据

      2.子组件接受到的数据,不能去修改。如果你的确需要修改,可以用计算属性,或者把数据赋值给子组件data里的一个变量

 // 1.用Props接受数据
 props: [
  &#39;num&#39;
  ],
// 2.如果需要修改得到的数据,可以这样写
 props: [
  &#39;num&#39;
 ],
 data () {
 return {
  number : this.num
 }
 },

子组件向父组件传递数据

父组件一共需要做2件事情

在template里定义事件

在methods里写函数,监听子组件的事件触发

// 1. 在templete里应用子组件时,定义事件changeNumber
 <counter :num="number"
   @changeNumber="changeNumber"
 >
 </counter>
// 2. 用changeNumber监听事件是否触发
 methods: {
  changeNumber(e){
  console.log(&#39;子组件emit了&#39;,e);
  this.number = e
  },
 }

子组件一共需要1件事情

在数据变化后,用$emit触发即可

// 1. 子组件在数据变化后,用$emit触发即可,第二个参数可以传递参数
 methods: {
  increment(){
   this.number++
   this.$emit(&#39;changeNumber&#39;, this.number)
  },
 }

第二种通信方式: eventBus

eventBus这种通信方式,针对的是非父子组件之间的通信,它的原理还是通过事件的触发和监听。

但是因为是非父子组件的关系,他们需要有一个中间组件来连接。

我是使用的通过在根组件,也就是#app组件上定义了一个所有组件都可以访问到的组件,具体使用方式如下

使用eventBus传递数据,我们一共需要做3件事情

      1.给app组件添加Bus属性 (这样所有组件都可以通过this.$root.Bus访问到它,而且不需要引入任何文件)

      2.在组件1里,this.$root.Bus.$emit触发事件

      3.在组件2里,this.$root.Bus.$on监听事件

// 1.在main.js里给app组件,添加bus属性
import Vue from &#39;vue&#39;
new Vue({
 el: &#39;#app&#39;,
 components: { App },
 template: &#39;<App/>&#39;,
 data(){
 return {
 Bus : new Vue()
 }
 }
})
// 2.在组件1里,触发emit
increment(){
 this.number++
 this.$root.Bus.$emit(&#39;eventName&#39;, this.number)
 },
// 3.在组件2里,监听事件,接受数据
mounted(){
 this.$root.Bus.$on(&#39;eventName&#39;, value => {
 this.number = value
 console.log(&#39;busEvent&#39;);
 })
},

第三种通信方式: 利用localStorage或者sessionStorage

这种通信比较简单,缺点是数据和状态比较混乱,不太容易维护。

通过window.localStorage.getItem(key) 获取数据

通过window.localStorage.setItem(key,value) 存储数据

注意:JSON.parse() / JSON.stringify()

2 .すべてのサブコンポーネント名をcomponents: {"son"} に登録します

3. 親のテンプレートにサブコンポーネントを適用しますコンポーネント、<son></son> 4. サブコンポーネントにデータを渡す必要がある場合は、<son :num="number"></son>rrreeerrreeerrreeerrreee

サブコンポーネントが実行する必要があるのは 1 つのことだけです

1. props を使用してデータを受信すると、データを直接使用できます

2. サブコンポーネントによって受信されたデータ変更することはできません。本当に変更する必要がある場合は、計算されたプロパティを使用するか、子コンポーネント データの変数にデータを割り当てることができます

rrreeerrreee

子コンポーネントは親コンポーネントにデータを渡します

親コンポーネントは合計を行う必要がありますテンプレート内でイベントを定義します

サブコンポーネントのイベントトリガーをリッスンする関数をメソッドに記述しますrrreeerrreee

サブコンポーネントには合計 1 つのものが必要です

データが変更されたら、次を使用するだけです$emit でトリガーしますrrreee

🎜🎜 2 番目の通信メソッド:eventBus🎜🎜🎜🎜eventBus は、非親コンポーネントと子コンポーネント間の通信を目的とした通信メソッドであり、その原理はやはりイベントのトリガーと監視です。 🎜🎜ただし、これらは親子コンポーネントではないため、それらを接続するための中間コンポーネントが必要です。 🎜🎜ルートコンポーネントである#appコンポーネントに、すべてのコンポーネントからアクセスできるコンポーネントを定義して使用しています🎜🎜具体的な使い方は以下の通りです🎜🎜eventBusを使ってデータを転送するには、合計3つを行う必要があります。物事🎜🎜 1 .アプリコンポーネントに Bus 属性を追加します (これにより、すべてのコンポーネントが this.$root.Bus を通じてアクセスできるようになり、ファイルを導入する必要がなくなります)🎜🎜 2.コンポーネント 1 では、 this.$root.Bus.$emit がイベント 🎜🎜 3 をトリガーします。コンポーネント 2 では、this.$root.Bus.$on がイベントをリッスンします。イベント 🎜rrreeerrreeerrreee🎜🎜🎜 3 番目のタイプの通信方法: localStorage または sessionStorage を使用する🎜🎜🎜🎜 この種の通信の欠点は、データとステータスがわかりにくく、維持するのが容易ではないことです。 🎜🎜 window.localStorage.getItem(key) を通じてデータを取得します 🎜🎜 window.localStorage.setItem(key,value) を通じてデータを保存します 🎜🎜🎜注: 🎜🎜データ形式の変換には JSON.parse() / JSON.stringify() を使用します。 🎜🎜🎜🎜4番目のコミュニケーション方法: Vuexを使用する🎜🎜🎜🎜Vuexはより複雑なので、別の記事を書くことができます🎜🎜上記は、皆さんのためにまとめたものです。将来的に皆さんのお役に立てれば幸いです。 🎜🎜関連記事: 🎜🎜🎜 SpringMVC を使用して vue クロスドメインリクエストを解決する🎜🎜🎜🎜 webpack 4.0.0-beta.0 バージョンの新機能 (詳細なチュートリアル)🎜🎜🎜🎜 vue2 で値の転送と通信を実装する方法.0 コンポーネント 🎜🎜

以上がVue コンポーネント通信 (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

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の複数の顧客にサービスを提供できます

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 最新バージョン

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境