コンポーネントを用いることで UI を独立した再利用可能な部品に分割し、それぞれの部品を切り離して考えることができるようになります。アプリケーションはネストされたコンポーネントのツリーによって構成されることになります。

コンポーネントにはグローバルコンポーネントとローカルコンポーネントがあります。

グローバルコンポーネント

グローバルコンポーネントはアプリケーション内のどのコンポーネントのテンプレートでも使えます。

以下はグローバルコンポーネントです。id=”ex1″ のなかであれば <hato1></hato1>というひとつのタグで自分のサイトへのリンクを挿入することができます。

グローバルコンポーネントなのでアプリケーション内のどのコンポーネントのテンプレートでも使えます。そのためこんなこともできます。hato3というコンポーネントを新しくつくり、そのなかでhato1とhato2を使用しています。

ローカルコンポーネント

ローカルコンポーネントはそのままでは他のコンポーネント内で使用できません。hato3のなかでhato1とhato2を使うのであれば以下のようにhato3のなかでhato1とhato2を登録して使います。

データの受け渡し

親子関係にあるコンポーネントの間でデータを渡すときはどうすればよいでしょうか?

親から子へ

component1のなかにcomponent2があり、component1のなかにあるボタンをクリックしたら更新されたデータを表示させます。

子コンポーネントから定義します。親コンポーネントのテンプレート内にcomponent2タグがあるので、こちらを先に定義します(順番が逆だとエラー)。親からdataを受け取ったら配列を半角スペース区切りの文字列に変換して表示します。

親コンポーネントを定義します。ボタンがクリックされたら配列 arr にデータを追加または削除し、子コンポーネントにdataとしてarrを渡します。

これで親コンポーネントで表示されているボタンをクリックすると、更新されたデータが子コンポーネントで表示されます。

子から親へ

次は子コンポーネントから親コンポーネントにデータを渡す処理を考えます。

component1のなかにcomponent2があるのは同じですが、component2のなかにあるボタンをクリックしたら更新されたデータがcomponent1で表示されるようにします。

これは子コンポーネントです。最初とデータが追加または削除されたときに、カスタムイベント data-changedを発生させます。mounted()でもカスタムイベント data-changedを発生させています。これは最初に表示するデータを渡しておかないとなにも表示されないからです。

dataChangedを監視してイベントが発生したら前回同様に配列を半角スペース区切りの文字列に変換して表示します。

あとは前回と同じです。