Vue.jsで孫から親コンポーネントにデータを渡す方法【現役エンジニアが解説】
今回は、Vue.jsで孫から親コンポーネントにデータを渡す方法について、簡単に解説していきます。
親コンポーネント
Vue.jsでは孫から親コンポーネントにデータを渡せます。
まずは、親コンポーネント側のサンプルを以下に示します。
<div id="app"> <child-component @click="parentEvent"></child-component> </div> <script> var app = new Vue({ el: '#app', methods: { parentEvent: function(text) { alert(text); } } }); </script>
ここでは子コンポーネントの呼び出しを行い、孫コンポーネントから最終的に呼び出すメソッドを用意します。
子コンポーネント
次に子コンポーネント側のサンプルを以下に示します。
Vue.component('child-component',{ template: '<grandchild-component @click="$listeners[\'click\']"></grandchild-component>' });
子コンポーネントでは$listenersを使うことがコツです。
孫コンポーネントを呼ぶテンプレートのカスタムイベントで$listenersを書き、そのキーには親コンポーネントのカスタムイベント名を記載します。
孫コンポーネント
最後に孫コンポーネント側のサンプルを以下に示します。
Vue.component('grandchild-component',{ template: '<button @click="$emit(\'click\', event.target.innerText)">孫イベント</button>' });
孫コンポーネントでは$emitメソッドを使うことがコツです。
$emitメソッドの第一引数には子コンポーネントのカスタムイベント名を、第二引数には親コンポーネント側に渡したいデータを指定します。