は、私は2つのVueのコンポーネントがありますか?コンポーネント間の通信はどのように機能しますか?Vueのコンポーネントの通信
答えて
Vue.jsのドキュメントでは、コンポーネント間の通信はあまり注目されておらず、このテーマをカバーするチュートリアルもありません。コンポーネントを分離する必要があるため、コンポーネントに直接アクセスしないでください。これは、コンポーネントを緊密に結びつけ、あなたがやっていることをまったく止めてしまいます。
Javascriptには、コミュニケーションのための優れた方法があります。 Vue.jsにはイベントシステムが組み込まれており、主に親子通信に使用されます。 From the docs:
Vueインスタンスの子と親に直接アクセスできますが、コンポーネント間通信には組み込みイベントシステムを使用する方が便利です。また、コードの結合も容易で、保守も簡単です。親子関係が確立されると、各コンポーネントのイベントインスタンスメソッドを使用してイベントを送出およびトリガーできます。
イベントシステムを説明するために彼らのコード例を:
var parent = new Vue({
template: '<div><child></child></div>',
created: function() {
this.$on('child-created', function (child) {
console.log('new child created: ')
console.log(child)
})
},
components: {
child: {
created: function() {
this.$dispatch('child-created', this)
}
}
}
}).$mount()
ダンHolloranは最近twopiecesで、クロスコンポーネントメッセージングと彼の「闘争」の作品を書いています。これは、親子関係のないコンポーネント間の通信が必要な場合に役立ちます。
(通信のイベントを使用する以外の)私が経験したもう1つのアプローチは、コンポーネントにバインドされたインスタンスを持つ公開APIへの参照を持つ中央コンポーネントレジストリを使用しています。レジストリはコンポーネントの要求を処理し、そのパブリックAPIを返します。
Vue.jsの文脈では、イベントは私の武器になります。
ペスラの回答に加えて、ガイドのState Management section under Building large scale apps:http://vuejs.org/guide/application.html#State_Managementをご覧ください。私はここに基づいてjsfiddleを作成しました:https://jsfiddle.net/WarwickGrigg/xmpLg92c/。
この手法はあまりにコンポーネントのために働く:親子、兄弟、兄弟コンポーネントの関係など
var hub = {
state: {
message: 'Hello!'
}
}
var vmA = new Vue({
el: '#appA',
data: {
pState: {
dA: "hello A"
},
hubState: hub.state
}
})
var vmB = new Vue({
el: '#appB',
data: {
pState: {
dB: "hello B"
},
hubState: hub.state
}
})
コンポーネント間の通信はまた、あなたのVueのアプリケーションでは、単一のグローバルイベントハブを作成することによって確立することができます。このような何か: -
var bus = new Vue();
今、あなたはカスタムイベントを作成して、任意のコンポーネントからそれらを聞くことができます。
// A.vue
// ...
doThis() {
// do the job
bus.$emit('done-this');
}
// B.vue
// ...
method:{
foo: function()
}
created() {
bus.$on('done-this', foo);
}
補足として、マルチファイルコンポーネントの場合、 'bus'は何らかの形ですべてのコンポーネントに見えるようにする必要があります。私はグローバルな 'Window'変数(これは悪い考えです)を使用します – WoJ
- 1. vueコンポーネントとvueインスタンス間の通信
- 2. Vue 2 - コンポーネント間の通信(データの送受信)
- 3. 完全に別のvueコンポーネントとの通信
- 4. vue js 2:店とコンポーネント間の通信方法
- 5. reactjsの通信コンポーネント
- 6. ReactJSコンポーネント通信
- 7. Maquetteのコンポーネント間の通信
- 8. Elmのコンポーネント間の通信
- 9. Emberのコンポーネント間の通信
- 10. VUEコンポーネント/ VUEの一つに、
- 11. Reactコンポーネント間の通信
- 12. React-native:コンポーネント間の通信
- 13. typescript、コンポーネント間の通信
- 14. ルーターアウトレットとAngular2コンポーネントの通信
- 15. Angular2の親子コンポーネント通信
- 16. Angular2コンポーネント間通信
- 17. バックボーンビュー - クロス・コンポーネント・通信
- 18. VueのJS - コンポーネント
- 19. ブレードのVueコンポーネント
- 20. Vueの2コンポーネントのスタイルのVueローダー
- 21. 再レンダリングVueのコンポーネント
- 22. hueのエスケープvueコンポーネント
- 23. vueコンポーネントのCsrfトークン
- 24. Vueコンポーネントの問題
- 25. VueコンポーネントのCSRFフィールド
- 26. 他のコンポーネントとの直接の通信
- 27. Angular2の2つのコンポーネント間の通信
- 28. vueインスタンスとvueコンポーネントの違いは?
- 29. 角型2コンポーネント間通信
- 30. vue.js子 - 親コンポーネント通信
この親子通信システムは、vue 2.0の将来のバージョンでは '$ dispatch'や' $ broadcast' [廃止予定](https://github.com/vuejs/vue/issues)では動作しませんのでご注意ください。/2873)。 – hitautodestruct