ホームページ ウェブフロントエンド Vue.js Vue コンポーネント間で通信する 6 つの方法

Vue コンポーネント間で通信する 6 つの方法

Jun 11, 2023 pm 08:42 PM
vueコンポーネント通信 propsパラメータの受け渡し イベントバス。

Vue は、シングルページ アプリケーションを構築するための人気のある JavaScript フレームワークです。 Vue では、コンポーネントはアプリケーションを構築するための基本単位であり、データの表示と処理に使用される再利用可能なコード ブロックです。コンポーネント通信は、コンポーネント間のデータ転送と対話のための中心的なメカニズムの 1 つです。この記事では、コンポーネントが通信する 6 つの方法について説明します。

1. プロップとイベント

プロップとイベントは、Vue の最も基本的なコンポーネント通信メソッドです。親コンポーネントは、props を通じて子コンポーネントにデータを渡します。子コンポーネントは、イベント コンストラクターを通じて親コンポーネントにデータを送信します。この通信方式は片方向伝送が特徴です。

親コンポーネントは、props を通じて子コンポーネントにデータを渡します:

<template>
  <child-component :message="parentMessage"></child-component>
</template>
<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    data() {
      return {
        parentMessage: 'this is parent'
      }
    },
    components: {
      ChildComponent
    }
  }
</script>
ログイン後にコピー

子コンポーネントでは、props を宣言し、props を使用して親コンポーネントからデータを受け取る必要があります:

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    props: ['message']
  }
</script>
ログイン後にコピー

次に、子コンポーネントはイベントを通じて親コンポーネントにデータを送信します。

<template>
  <button @click="updateParentMessage">Update Parent Message</button>
</template>
<script>
  export default {
    methods: {
      updateParentMessage() {
        this.$emit('update-message', 'this is child');
      }
    }
  }
</script>
ログイン後にコピー

親コンポーネントでは、子コンポーネントのイベントをリッスンし、イベント リスニングで子コンポーネントからデータを受信する必要があります。 function:

<template>
  <child-component :message="parentMessage" @update-message="updateMessage"></child-component>
</template>
<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    data() {
      return {
        parentMessage: 'this is parent'
      }
    },
    components: {
      ChildComponent
    },
    methods: {
      updateMessage(message) {
        this.parentMessage = message;
      }
    }
  }
</script>
ログイン後にコピー

2. Vuex

Vuex は、Vue の状態管理用の公式プラグインです。 Vuex はグローバルな状態管理モデルを実装しています。ストアを通じてアプリケーションのすべてのコンポーネントの状態を一元管理します。複数のコンポーネントが状態を共有する場合、Vuex を使用すると、コンポーネント間のデータ交換と通信の管理が容易になります。

まず、Vuex ストアを作成する必要があります:

import Vuex from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    message: 'hello world'
  },
  mutations: {
    updateMessage(state, message) {
      state.message = message
    }
  },
  actions: {
    updateMessage({ commit }, message) {
      commit('updateMessage', message)
    }
  },
  getters: {
    getMessage: state => state.message
  }
})

export default store
ログイン後にコピー

コンポーネントでは、$store を使用してストア内の状態にアクセスし、commit メソッドを使用して変更するミューテーションを送信できます。状態:

<template>
  <div>{{ this.$store.getters.getMessage }}</div>
  <button @click="updateMessage">Update Message</button>
</template>
<script>
  export default {
    methods: {
      updateMessage() {
        this.$store.dispatch('updateMessage', 'hello vuex')
      }
    }
  }
</script>
ログイン後にコピー

3. $parent と $children

Vue のすべてのコンポーネントには、$parent プロパティと $children プロパティがあります。 $parent プロパティはコンポーネントの親コンポーネントを指し、$children プロパティはコンポーネントの子コンポーネントを指します。 $parent プロパティと $children プロパティを通じて、コンポーネントは親コンポーネントと子コンポーネントのデータとメソッドに直接アクセスできます。

たとえば、親コンポーネントは、$children 属性を通じて子コンポーネントのデータとメソッドにアクセスできます。

<template>
  <div>
    {{ $children[0].message }}
    <button @click="$children[0].updateMessage">Update message</button>
  </div>
</template>
ログイン後にコピー

子コンポーネントでは、message メソッドと updateMessage メソッドを定義する必要があります。

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    data() {
      return {
        message: 'hello child'
      }
    },
    methods: {
      updateMessage() {
        this.message = 'hello parent'
      }
    }
  }
</script>
ログイン後にコピー
ログイン後にコピー

four , $refs

Vue のすべてのコンポーネントには $refs 属性があります。 $refs 属性は、コンポーネント内の ref 属性を使用して名前が付けられたサブコンポーネントまたは DOM 要素への参照を含むオブジェクトです。 $refs 属性を通じて、コンポーネントは相互に参照したり呼び出したりできます。

たとえば、親コンポーネントの ref 属性を通じてサブコンポーネントの参照を取得できます:

<template>
  <div>
    <child-component ref="childComponent"></child-component>
    <button @click="updateMessage">Update message</button>
  </div>
</template>
<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    components: {
      ChildComponent
    },
    methods: {
      updateMessage() {
        this.$refs.childComponent.updateMessage()
      }
    }
  }
</script>
ログイン後にコピー

サブコンポーネントでは、updateMessage メソッドを定義する必要があります:

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    data() {
      return {
        message: 'hello child'
      }
    },
    methods: {
      updateMessage() {
        this.message = 'hello parent'
      }
    }
  }
</script>
ログイン後にコピー
ログイン後にコピー

5. イベント バス

イベント バスは、Vue コンポーネント間でイベントを効率的に配信できる、広く使用されている中央イベント システムです。イベント バスは、$emit メソッドを通じて他の Vue コンポーネントにイベントを送信したり、$on メソッドを通じて他の Vue コンポーネントから送信されたイベントを受信したりできる単純な Vue インスタンスです。

イベント バスを実装するときは、新しい Vue インスタンスを作成する必要があります:

import Vue from 'vue'

const bus = new Vue()

export default bus
ログイン後にコピー

次に、コンポーネントにイベント バスを導入し、$emit を使用してイベントを送信し、$on を使用してイベントを受信します。 . :

// 发送事件
import Bus from './Bus.js'

Bus.$emit('event-name', data)

// 接收事件
import Bus from './Bus.js'

Bus.$on('event-name', (data) => {
  console.log(data)
})
ログイン後にコピー

6. Provide と Inject

Vue 2.2 の新しい Provide と Inject は、高度なコンポーネント通信方法です。 Provide と Inject を使用すると、親コンポーネントは、子に指示するだけでなく、すべての子孫コンポーネントにデータを渡すことができます。 Provide と Inject は、props、event、$parent/$children とは異なるコンポーネント通信の形式であり、より柔軟でカプセル化された通信方法です。

親コンポーネントは、provide を通じてデータを提供します:

<template>
  <child-component></child-component>
</template>
<script>
  export default {
    provide: {
      message: 'hello provide'
    }
  }
</script>
ログイン後にコピー

子コンポーネントでは、親コンポーネントから渡されたデータを受け取るために inject を定義する必要があります:

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    inject: ['message']
  }
</script>
ログイン後にコピー

これらは次のとおりです。 6種類のVueコンポーネント通信方法の紹介。アプリケーションのシナリオが異なれば、コンポーネントの通信方法も異なります。これらの通信方法をマスターすると、Vue コンポーネントの開発をより効率的、シンプル、かつ柔軟にすることができます。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue コンポーネント通信: コンポーネント通信にコールバック関数を使用する Vue コンポーネント通信: コンポーネント通信にコールバック関数を使用する Jul 09, 2023 pm 07:42 PM

Vue コンポーネント通信: コンポーネント通信にコールバック関数を使用する Vue アプリケーションでは、情報を共有して相互に連携できるように、さまざまなコンポーネントが相互に通信できるようにする必要がある場合があります。 Vue はコンポーネント間の通信を実装するさまざまな方法を提供します。一般的な方法の 1 つはコールバック関数を使用することです。コールバック関数とは、関数を引数として別の関数に渡し、特定のイベントが発生したときに呼び出される仕組みです。 Vue では、コールバック関数を使用してコンポーネント間の通信を実装できるため、コンポーネントは

Vue コンポーネント通信: v-cloak ディレクティブを使用して表示通信を初期化します。 Vue コンポーネント通信: v-cloak ディレクティブを使用して表示通信を初期化します。 Jul 09, 2023 pm 08:10 PM

Vue コンポーネント通信: v-cloak ディレクティブを使用して表示通信を初期化します Vue 開発において、コンポーネント通信は非常に重要なトピックです。 Vue はさまざまな通信方法を提供しますが、その中で v-cloak ディレクティブを使用して表示通信を初期化する方法が一般的です。この記事では、コンポーネント間の通信に v-cloak ディレクティブを使用する方法を学び、コード例を使用して詳しく説明します。まず、v-cloak 命令が何をするのかを理解しましょう。 v-cloak ディレクティブは Vu です。

Vue コンポーネント通信: カスタム イベント リスニングに $on を使用する Vue コンポーネント通信: カスタム イベント リスニングに $on を使用する Jul 08, 2023 pm 01:37 PM

Vue コンポーネント通信: カスタム イベント リスニングには $on を使用します。Vue では、コンポーネントは独立しており、各コンポーネントは独自のライフ サイクルとデータを持ちます。しかし、実際の開発プロセスではコンポーネント間の通信は避けられません。 Vue は、コンポーネント通信の非常に柔軟かつ効率的な方法、つまりカスタム イベント リスニングを提供します。 Vue のカスタム イベント リスニング メカニズムは、パブリッシュ/サブスクライブ モデルに基づいて実装されています。 Vue インスタンスの $on メソッドを使用してコンポーネント内のカスタム イベントをリッスンしたり、Vue インスタンスの $emit メソッドを使用したりできます。

Vue コンポーネント通信: フォームの双方向バインディング通信には v-model ディレクティブを使用します Vue コンポーネント通信: フォームの双方向バインディング通信には v-model ディレクティブを使用します Jul 07, 2023 pm 03:03 PM

Vue コンポーネント通信: フォームの双方向バインディング通信には v-model ディレクティブを使用します。 Vue.js は、軽量で柔軟かつ効率的なユーザー インターフェイスを構築するための進歩的な JavaScript フレームワークです。 Vue アプリケーションでは、コンポーネント通信は非常に重要な機能です。 Vue は、コンポーネント間の通信を実装するさまざまな方法を提供します。その中で、フォーム双方向バインディング通信に v-model ディレクティブを使用するのが一般的で便利な方法です。 Vue では、v-model ディレクティブがフォームで使用されます

Vue コンポーネント通信: データ監視に $watch を使用する Vue コンポーネント通信: データ監視に $watch を使用する Jul 07, 2023 am 11:09 AM

Vue コンポーネント通信: $watch を使用したデータ監視 Vue 開発では、コンポーネント通信が一般的な要件です。 Vue では、コンポーネント間の通信を実装するさまざまな方法が提供されており、一般的な方法の 1 つは、データ監視に $watch を使用することです。この記事では、$watch の使用法を紹介し、対応するコード例を示します。 Vue のインスタンス オブジェクトは、データの変更を監視するための $watch メソッドを提供します。 $watch は、監視するデータのプロパティ名とコールバック関数の 2 つのパラメータを受け入れます。データを聞くとき

Vue.js コンポーネント間の通信のデザイン パターン Vue.js コンポーネント間の通信のデザイン パターン Sep 02, 2023 am 11:45 AM

開発者として、私たちは管理しやすく保守しやすく、デバッグやテストも容易なコードを生成したいと考えています。これを実現するために、パターンと呼ばれるベスト プラクティスを採用します。パターンは、特定のタスクを効率的かつ予測可能な方法で達成するのに役立つ実証済みのアルゴリズムとアーキテクチャです。このチュートリアルでは、最も一般的な Vue.js コンポーネントの通信パターンと、避けるべきいくつかの落とし穴について見ていきます。実生活では、すべての問題に対する唯一の解決策がないことは誰もが知っています。同様に、Vue.js アプリケーション開発にも、すべてのプログラミング シナリオに適用できる普遍的なパターンはありません。各モードには独自の長所と短所があり、特定の使用例に適しています。 Vue.js 開発者にとって最も重要なことは、

Vue コンポーネント通信: データ転送には v-bind ディレクティブを使用します Vue コンポーネント通信: データ転送には v-bind ディレクティブを使用します Jul 07, 2023 pm 04:46 PM

Vue コンポーネント通信: データ転送には v-bind 命令を使用します。Vue.js は、強力なコンポーネント開発機能を提供する人気のあるフロントエンド フレームワークです。 Vue アプリケーションでは、コンポーネントの通信は重要な問題です。 v-bind命令はVueフレームワークが提供するデータ転送メソッドで、この記事ではv-bind命令を使ってコンポーネント間でデータを転送する方法を紹介します。 Vue では、コンポーネント通信は、親子コンポーネント通信と兄弟コンポーネント通信の 2 つの状況に分類できます。以下、この2つの側面からそれぞれ紹介していきます。

Vue コンポーネント間で通信する 6 つの方法 Vue コンポーネント間で通信する 6 つの方法 Jun 11, 2023 pm 08:42 PM

Vue は、単一ページ アプリケーションを構築するための人気のある JavaScript フレームワークです。 Vue では、コンポーネントはアプリケーションを構築するための基本単位であり、データの表示と処理に使用される再利用可能なコード ブロックです。コンポーネント通信は、コンポーネント間のデータ転送と対話のための中心的なメカニズムの 1 つです。この記事では、コンポーネントが通信する 6 つの方法について説明します。 1. プロップとイベント プロップとイベントは、Vue の最も基本的なコンポーネント通信メソッドです。小道具を通して、

See all articles