メッセージチャネルでの公開
Lightning Web コンポーネントからメッセージチャネルでメッセージを公開するには、範囲設定されたモジュール @salesforce/messageChannel
をコンポーネントの JavaScript ファイルに含め、Lightning Message Service の publish()
関数をコールします。
Lightning Message Service は、コンポーネントライフサイクルの破棄フェーズになるまで、登録しているコンポーネントにメッセージを公開します。Lightning ページから移動すると、コンポーネントがキャッシュされ、破棄されないことがあります。Lightning Message Service がアプリケーション全体に範囲設定されている場合でも、これらのコンポーネントは Lightning Message Service からのメッセージを公開および受信します。
github.com/trailheadapps/lwc-recipes リポジトリの lmsPublisherWebComponent は、Lightning ページで登録者に通知するメッセージを公開します。Lightning Message Service により、ページの Visualforce、Aura、Lightning Web コンポーネントの間でそのメッセージの通信が行われます。
コンポーネントの HTML テンプレートファイルには、取引先責任者のリストが表示されます。取引先責任者が選択されると、handleContactSelect
ハンドラが呼び出され、メッセージがメッセージチャネルに公開されます。
コンポーネントの JavaScript ファイルで、メッセージチャネルと、メッセージチャネルを操作するために必要な Lightning Message Service 関数をインポートします。
@wire(MessageContext)
を使用して MessageContext
オブジェクトを作成します。このオブジェクトは、Lightning Message Service を使用している Lightning Web コンポーネントに関する情報を提供します。@wire(MessageContext)
アダプタを使用する場合、コンポーネントのライフサイクルイベントを操作する必要はありません。コンポーネントが破壊されると、Lightning Message Service 機能によって自動的に登録が解除されます。
handleContactSelect()
メソッドは、公開するメッセージコンテンツを作成します。Lightning Message Service の publish()
関数は、メッセージコンテキスト、メッセージチャネルの名前、メッセージペイロードの 3 つのパラメータを取ります。ここでは、メッセージペイロードは JSON オブジェクト (recordId
キーの値は event.target.contact.Id
) です。
コンポーネントを DOM に添付してからでないと、@wire(MessageContext)
でデコレートされたプロパティを使用できません。constructor()
関数では @wire(MessageContext)
を使用できません。
関連トピック