2017-10-03 8 views
1

2つのVueJsコンポーネント間で情報を交換しようとしています。Vuejs - 親子以外のコンポーネント間の情報の交換

ここには状況があります。

コンポーネントAが主要コンポーネントです。成分B

からIは、成分は同じものを使用しているhere場合がわかりました、Iは成分Dの変数値を変更する B及びCは、Aにあり、そしてDは、C

にあります最初のコンポーネントからルートにブロードキャストした後、ルートから2番目のコンポーネントにブロードキャストされたデータを取得した後に行うことができます。 私の場合、私のコンポーネントDは、 "コンポーネントツリー"のルートと深いところに直接にはありません...だから、私は試しましたが、これはうまくいかないようです。

これを行う最も簡単なやり方は何ですか?

ありがとうございました。

+1

[Vueで親子以外のコンポーネント間でデータを共有するにはどうすればいいですか?](https://stackoverflow.com/questions/34925841/how-can-i-share-data-between-non-parent-子供のコンポーネントin-vue) – thanksd

答えて

1

このような場合は、vueのマニュアルに記載されているようにEventbusを使用します。無意識に情報を渡すための空のVueオブジェクト。

window.EventBus = new Vue(); 

データを受け取るコンポーネントでは、イベントを作成します。

mounted: function() { 
    EventBus.$on('name', function (data) { 
     // Do something with the data 
    }); 
} 

最後に、データを送信するコンポーネントでは、その関数を呼び出す必要があります。

methods: { 
    someFunction: function() { 
     EventBus.$emit('name', data); 
    } 
} 

使いやすいようにEventBusオブジェクトへのアクセスを提供するプロトタイプリンクを作成できます。あなたはthis.$eventBus.$onまたはこのjsFiddleに見られるようthis.$eventBus.$emitを使用してアクセスすることができます

Vue.prototype.$eventBus = window.EventBus 

+0

ありがとう!私はVue-cliを使用していますので、あなたと同じ構文(xxx.xx = new Vue();)は使用しません。vuejsとWeb開発を開始しています。 –

+0

実際、私は単一のページコンポーネントを使用していますが、私の特定のテンプレートであなたが言ったことをどのように使うのか分かりません。 –

+0

OK私はそれを得ました。シングルページのコンポーネントテンプレートを使用しているとき、私はeventue.usファイルを作成しました.'vueからのVueのインポート\ nはbus = new Vue()\ n export default bus 'となりました。私は、 "@/path/eventBus"からバスをインポートする必要があります: 'bus。$ on(' myEvent '、myVariable)' –

関連する問題