[解決済み] Vue.js 2.0での兄弟コンポーネント間のコミュニケーション
質問
概要
Vue.js 2.xでは。
model.sync
は非推奨となります。
.
で兄弟コンポーネント間で通信するための適切な方法は何でしょうか? Vue.js 2.x ?
背景
Vue.js 2.xの理解では、兄弟間のコミュニケーションに望ましい方法として は、ストアまたはイベントバスを使用する .
によると エヴァン (Vue.jsの作者)です。
<ブロッククオートまた、コンポーネント間でデータを受け渡しするのは、以下のようになります。 というのも、最終的にデータの流れが変わってしまうからです。 追跡不可能で、デバッグが非常に困難です。
あるデータを複数のコンポーネントで共有する必要がある場合、以下の方法があります。 グローバルストア または ビュークス .
[ ディスカッションへのリンク ]
そして
.once
と.sync
は非推奨です。小道具は常に一方通行になりました。このため 親スコープで副作用を発生させるには、コンポーネントが 明示的にemit
を暗黙のバインディングに頼らず、イベントとして扱います。
だから
エヴァンの提案
を使って
$emit()
と
$on()
.
懸念事項
心配なのは
-
各
store
とevent
はグローバルな可視性を持っています(間違っていたら訂正してください)。 - 細かい通信のたびに新しいストアを作成するのは無駄が多すぎる。
私が欲しいのは、いくつかの
スコープ
events
または
stores
を兄弟コンポーネントに対して可視化します。(あるいは、私が上記の考えを理解していなかったのかもしれません)。
質問
では、兄弟コンポーネント間の通信はどのように行うのが正しいのでしょうか?
どのように解決するのですか?
Vue.js 2.0では、デモのようにeventHubのメカニズムを使っています。 ドキュメントにある .
-
集中型イベントハブを定義する。
const eventHub = new Vue() // Single event hub // Distribute to components using global mixin Vue.mixin({ data: function () { return { eventHub: eventHub } } })
-
これで、あなたのコンポーネントでは、次のようにイベントを発行できます。
this.eventHub.$emit('update', data)
-
そして、あなたがすることを聞くために
this.eventHub.$on('update', data => { // do your thing })
更新情報
ご覧ください alexの回答 よりシンプルな解決策を説明しています。
関連
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
Vueでルートネスティングを実装する例
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
JavaScriptのgetElementById()メソッド入門
-
[解決済み] Vue.js - ネストされたデータを適切に監視する方法
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] Bowerとnpmの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueの要素ツリーコントロールに破線を追加する説明
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
jq は html ページとデータを動的に分割する。