ホームページ > 記事 > ウェブフロントエンド > イベントバスの非親子コンポーネントが相互に通信する方法
今回は、イベントバスの非親コンポーネントと子コンポーネントが相互に通信する方法について説明します。次に、イベントバスの非親コンポーネントと子コンポーネントが相互に通信するための注意事項について説明します。一見。
場合によっては、親子関係にないコンポーネントも通信する必要があります。単純なシナリオでは、空の Vue インスタンスを中央のevent バスとして使用します:
var bus = new Vue() // 触发组件 A 中的事件 bus.$emit('id-selected', 1) // 在组件 B 创建的钩子中监听事件 bus.$on('id-selected', function (id) { // ... })より複雑な場合は、専用の
state 管理モードの使用を検討する必要があります。ここで vuex
が使用されます。 EventBus は、兄弟として機能するコンポーネント間の通信の仲介者です。 コード例:<!DOCTYPE html> <html> <head> <title>eventBus</title> <script src="http://cdn.jsdelivr.net/vue/1.0.28/vue.min.js"></script> </head> <body> <p id="todo-app"> <h1>todo app</h1> <new-todo></new-todo> <todo-list></todo-list> </p> <script> var eventHub = new Vue( { data(){ return{ todos:['A','B','C'] } }, created:function () { this.$on('add', this.addTodo) this.$on('delete', this.deleteTodo) }, beforeDestroy:function () { this.$off('add', this.addTodo) this.$off('delete', this.deleteTodo) }, methods: { addTodo: function (newTodo) { this.todos.push(newTodo) }, deleteTodo: function (i) { this.todos.splice(i,1) } } }) var newTodo = { template:`<p><input type="text" autofocus v-model="newtodo"/><button @click="add">add</button></p>`, data(){ return{ newtodo:'' } }, methods:{ add:function(){ eventHub.$emit('add', this.newtodo) this.newtodo = '' } } } var todoList = { template:`<ul><li v-for="(index,item) in items">{{item}} \ <button @click="rm(index)">X</button></li> \ </ul>`, data(){ return{ items:eventHub.todos } }, methods:{ rm:function(i){ eventHub.$emit('delete',i) } } } var app= new Vue({ el:'#todo-app', components:{ newTodo:newTodo, todoList:todoList } }) </script> </body> </html>この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。 推奨読書:
データ イベントを追加するためのポップアップ ポップアップ ボックス バインディング (詳細なステップバイステップの説明)
以上がイベントバスの非親子コンポーネントが相互に通信する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。