2017-01-26 14 views
3

私はこのリンクに記載された方法でコンポーネントが他のコンポーネントとやり取りできるようにバスを使用しています:https://forum.vuejs.org/t/create-event-bus-in-webpack-template/4546/2

私はイベントを発生させるためにバスを使用する作成されたフックで呼び出されるメソッドを持っています。 (上記の成分に含まれている)別のコンポーネントで

created() { 
    this.getReviewDeck() 
}, 
myMethod() { 
    bus.$emit('increment') 
} 

が、私は以下のように作成したフックにイベントリスナーをアタッチ:私はコンポーネントを訪問すれば

created() { 
    bus.$on('increment', this.incrementCount) 
}, 
incrementCount() { 
    console.log('count incremented') 
} 

初めてのすべてが正常に動作し、コンソールは「カウント増分」を1回記録します。しかし、私がコンポーネントを離してからそれに戻ってくると、次回に 'count incremented'が2回記録され、再び出て再び3回ログに記録されます。

私はできません正確に何が起こっているのか、この問題を解決するにはどのように最善の方法を考えて、コンポーネントに行く度にメッセージを複数回ではなく1回だけ記録するようにします。

+1

どのようにバスを設定しますか?多分あなたはそれを何度も定義しますか?私は通常、アプリケーションのブートストラップのVueコンポーネントプロトタイプにバスを追加します。これにより、複数回定義する必要がなくなります。 fristの "デバッグステップ"として、作成されたメソッド内でログをコンソールで実行して、バスに登録してその呼び出し頻度を確認する必要があります。一度だけ呼び出されるべきです。 –

+0

「離れる/コンポーネントを訪問する」とはどういう意味ですか? – keksnicoh

答えて

10

破壊時にイベントハンドラを削除する必要がありました。

beforeDestroy() { 
    EventBus.$off('increment', this.incrementCount) 
}, 
+0

何とか@dpstの解決策がうまくいかず、 'beforeDestory'に' bus。$ off'を追加すると3回修正されました。 この時点で、関数の最後に 'bus。$ off'を追加して、それを1日と呼びます。 – KuN

+0

私自身のプロジェクトでは、beforeDestroyの代わりに 'destroyed'イベントを使用しました。 – chocojosh

関連する問題