2016-10-17 6 views
4

から聞くイベントカスタムイベント、VUEにかなり新しいコンポーネント

ちょうどメインVUEインスタンス(親)からカスタムイベントを放出することが可能であるかどうかを知りたいとコンポーネント、ここJSできましたそのカスタムイベントを聞いて、そのイベントがトリガーされたときにそれに応じて行動しますか?

vueインスタンスにカスタムイベントをトリガーしたい場合は、ライフサイクル関数を実装して、すべてのコンポーネントを初期化できます。

ex。

メインVUEインスタンス

new Vue({ 
    el : '#main-app', 
    mounted : function() { 
     this.$emit('init-app'); 
    } 
}); 

そして、さまざまなコンポーネントで、それはそれがトリガーまたは放出されたとき 「のinit-アプリ」カスタムイベントは、それに応じて行動するために聞くことができます。

ないVUE jsのイベントリスナーでこれだってを行う方法がわからは、HTMLタグに添付されていますか?イベントリスナまたはコンポーネント内の機能は、親からのイベントだけが放出されるだけでトリガされますか?

注:私はVUEのJS 2.0.3 を使用していて、私のコンポーネントがグローバルである、彼らは

EXをインライン化されていません。

Vue.component('my-component', { 
    template: '#component-template' 
}); 

後でさらにコンポーネントを追加できます。

ありがとうございます。

+0

私は、コンポーネント自身に、各コンポーネントの初期化コードを入れたい、私はメインVUEインスタンス上に置く必要はありません。 – Jplus2

+0

ドキュメントで説明されているように$ onと$ emitを使用することを考えていますか? –

+0

は再び私はあなたが私に私が上記の私の質問に基づいて、欲しいものを達成する方法の例をお願いすることができ、VUE JSにかなり新たなんですか?私が望むものを実装する方法がわからず、いくつかのコードサンプルを表示するのは本当に役に立ちます。 – Jplus2

答えて

4

あなたの子コンポーネントを初期化する正しい方法は、あなたの子コンポーネントごとにcreated:ライフサイクルフックを使用することです。

理由:それはあなたが親コンポーネントからあなたinit-appイベントを送信するとき、あなたの子コンポーネントがインスタンス化されないことが十分に可能です。したがって、初期化されることはありません。

イベントに関する追加の注意:子コンポーネントから親コンポーネントにイベントを送信する場合は、this.$parent.$emit("my-event-code")を使用し、親サイドでthis.$on("my-event-code")として受信する必要があります。私は最近、様々な方法を試して数時間後にそれを理解しました。

init-appイベントを親から子に送信しようとしている場合は、子コンポーネントをthis.$parent.$on("init-app", ...)としてリッスンする必要があります。これはまだ検証されていませんが、これは現在の理解です。

+0

おかげで答え@Maniのために、あなたはあなたのソリューションのコードサンプルを提供してくださいできますか? btw質問を更新しました。コンポーネントがグローバルコンポーネントであり、メインのVUEインスタンスにインラインではないことを通知できませんでした。 – Jplus2

+1

@ Jplus2お互いに無関係のグローバルコンポーネントがあることはわかりませんでした。この場合、ここで説明されているように**イベントバス**を作成するオプションは1つだけです(http://vuejs.org/guide/components)。html#非親子の子どものコミュニケーション – Mani

+0

ありがとう@マニ、ソリューションに私を導く、基本的にコンポーネントが実際にvueのインスタンスに似たライフサイクルイベントを持っています。私はそれをテストしなかったので、私は愚かでした。ドキュメントでは、ライフサイクルフックを持つコンポーネントについては明示的に言及していませんでしたが、コンポーネントがレンダリングされた後にトリガされるので、* mounted *フックを使用しました。 – Jplus2

関連する問題