ホームページ  >  記事  >  ウェブフロントエンド  >  イベントバスの非親子コンポーネントが相互に通信する方法

イベントバスの非親子コンポーネントが相互に通信する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-16 14:25:221277ブラウズ

今回は、イベントバスの非親コンポーネントと子コンポーネントが相互に通信する方法について説明します。次に、イベントバスの非親コンポーネントと子コンポーネントが相互に通信するための注意事項について説明します。一見。

場合によっては、親子関係にないコンポーネントも通信する必要があります。単純なシナリオでは、空の 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 サイトの他の関連記事に注目してください。

推奨読書:

JS がブラウザーでスクリプトを検出する方法

データ イベントを追加するためのポップアップ ポップアップ ボックス バインディング (詳細なステップバイステップの説明)

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

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