私はVue 2.0のチュートリアルを勉強していますが、イベントバスを使用したコミュニケーションのレッスンを終えてすぐ親以外のコンポーネントとの通信が可能になりました。2番目のVueインスタンスを非親子通信用にインスタンス化するには
チュートリアルで提示されたコードは私にエラーを与えましたが、私は以下で説明するようにそれを私自身で解決することができました。私はなぜ自分の学習と理解のために元のコードがうまくいかなかったのか理解したいと思います。次のように
チュートリアルで与えられたコードは次のとおりです。
Window.Event = new Vue();
Vue.component('coupon', {
template: '<input placeholder="Coupon Code" @blur="onCouponApplied">',
methods: {
onCouponApplied() {
Event.$emit('applied');
}
}
});
var app = new Vue({
el: '#root',
created() {
Event.$on('applied',() => alert('Handling it!'));
}
});
私が実行しようとしたとき、私はエラーを受け取りました:「例外TypeError:イベント$には関数ではありません」。オンライン調査した結果、私は単純に最初のVueインスタンスのインスタンス化を変更:
var bus = new Vue();
と、次のように続い/発するように呼ば:
bus.$emit('applied');
と
bus.$on('applied',() => alert('Handling it!'));
の場合を私自身の理解、私は以下のいくつかの助けに感謝します:
- 元のWindow.Event形式が私のために働いていないのはなぜですか? 他の人のために働いていたのはなぜですか?
- このチュートリアル のコメントセクションには、Window.Eventをベストプラクティスとして使用している行に沿って、 のコメントがありましたが、その理由を説明していませんでした。
- 私がやったやり方に間違いがありますか? 元の機能を使用しないと失うことになります。 Window.Event?
ありがとう!
うわー、大文字の「W」が私の問題でした!恥ずかしいが、本当にありがとう。だから私が正しく読んだら、私がvarバスを使って行ったやり方は、どんな場合でも良いアプローチですか? –
@DustinS 'var bus'は完璧です! – Bert
@DustinS私は 'window.bus'を書くことがあるかもしれないことに注意してください。たとえば、複数の別々のファイルをコンパイルするためにwebpackを使用していた場合は、それを行う必要があります。 – Bert