tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Lightning Web コンポーネント間の通信を試してみました

TrailheadのLightning Web コンポーネント間の通信を試してみました。

Communicate Between Lightning Web Components | Salesforce Trailhead

子から親へのコミュニーケーション

Controls コンポーネントから Numerator コンポーネントへの通信という形のサンプルアプリケーションを開発します。

Event Comms アプリケーションページを作成

コンポーネントを配置するためのアプリケーションページを作成。ひとまずは枠のみ。


アプリケーションページタブにアクセスできるようにアプリケーションにも追加しておく。

numerator コンポーネントを作成

サンプルコードをコピーして作成。


アプリケーションページに配置する。


controls コンポーネントを作成

さっきと同じ手順で進める。


こんな感じ。js-meta.xmlファイルは編集不要。


numerator コンポーネントのHTML内でcontrols コンポーネントを宣言


この時点でこうなりました。値の連携はまだです。

値連携処理を実装。

controlsのhtmlを加工。


controlsのjsを加工。


numeratorのhtmlを加工。

numeratorのjsを加工。


実装結果。controlsのボタンの処理結果がnumeratorコンポーネントに反映されている感じ。

カスタムバブルを許可

おまけ的な内容です。


手順どおりに進めるとこういう感じになりました。

親から子へのコミュニーケーション

次の内容が重要なポイント。

子コンポーネントのデコレータ@apiはプロパティを公開してパブリックにし、親コンポーネントがプロパティを更新できるようにします。


numerator.jsに@apiを追加する。


augmentorコンポーネントを作成


アプリケーションページの中央領域に配置。このようになります。


あとはパブリック関数を呼び出すとパブリックのゲッターとセッターを使用するのサンプルコードが用意されているので説明どおりに進めます。

パブリック関数

ゲッター・セッター


完成。機能自体に深い意味はありませんがLWC開発の手法を学べるサンプルアプリケーションです。

無関係なコンポーネント間の通信

上で試したのはhtml内で別のコンポーネントを宣言したもの (親子関係) のコンポーネント間通信でした。これは直接の繋がりの内コンポーネント間の連携となります。

messageChannelsフォルダを作成。

最初に以下の作業から実施します。

Visual Studio Code のdefaultのフォルダーに、 messageChannelsという名前のフォルダーを作成します。
その中にCount_Updated.messageChannel-meta.xmlファイルを作成します。


どういう意味かなと最初思ったのですが、force-app/main/defaultフォルダの中に作成するという意味でした。

remoteControlコンポーネントを作成


html,js,meta.xmlと用意します。

counts コンポーネントを作成


アプリケーションページに追加して動かす

右側の領域に配置して動かしてみます。Remote Controlの処理結果がCountsコンポーネントに連携できることを確認できます。