ページ参照を使用した Lightning Experience および Salesforce モバイルアプリケーションでのナビゲーション
これらのナビゲーションリソースは、Lightning Experience と Salesforce モバイルアプリケーションでのみサポートされています。Visualforce 用 Lightning コンポーネント、Lightning Out、コミュニティなど、他のコンテナではサポートされていません。Lightning Experience や Salesforce モバイルアプリケーション内でこれらのコンテナにアクセスした場合も同じです。
次のリソースを使用して、アプリケーションのナビゲーションを簡易化します。例は「コンポーネントライブラリ」を参照してください。
- lightning:navigation
-
ページまたはコンポーネントに移動するには、lightning:navigation で navigate() メソッドを使用します。これは navigateTo* イベントの代替となる方法で、両方ともサポートされています。
コンポーネントで URL を生成するには、lightning:navigation で generateUrl() メソッドを使用して URL を解決します。 - lightning:isUrlAddressable
- URL を介して直接コンポーネントに移動できるようにするには、コンポーネントに lightning:isUrlAddressable インターフェースを追加します。
pageReference は、ページ種別および対応する属性を記述する、明確に定義された構造を提供します。pageReference では次のプロパティがサポートされています。
| プロパティ | 型 | 説明 | 必須かどうか |
|---|---|---|---|
| type | String | pageReference 型の API 参照名 (例: standard__objectPage)。 | Y |
| attributes | Object | ページ定義で指定された各属性の値 (例: objectAPIName または actionName)。 | Y |
| state | Object | Lightning Experience での URL のクエリ文字列に関連付けられているパラメータ (filterName など)。ルーティングフレームワークは、ページを表示するのに state には依存しません。 |
1var pageReference = {
2 type: 'standard__objectPage',
3 attributes: {
4 objectApiName: 'Account',
5 actionName: 'list'
6 },
7 state: {
8 filterName: 'MyAccounts'
9 }
10};pageReference.state のキー - 値ペアは URL クエリパラメータに逐次化されるため、そのすべての値は文字列です。state の値を使用するコードは、値を正しい形式で適切に解析する必要があります。state 配列の値を削除するには、その値を未定義として定義します。
pageReference オブジェクトを直接変更することはできません。state を更新するには、新しい pageReference オブジェクトを作成し、Object.assign() を使用して値をコピーします。
state パラメータは名前空間が設定されている必要があります。たとえば、名前空間が abc でパラメータが accountId の管理パッケージは、abc__accountId として表されます。カスタムコンポーネントの名前空間は c__ です。名前空間のないパラメータは、Salesforce が使用するために予約されています。この名前空間の制限は、Winter '18 の CRUC で導入され、Spring '19 に適用されています。
force:navigateToComponent から lightning:isUrlAddressable への移行
現在 force:navigateToComponent イベントを使用している場合、lightning:isUrlAddressable を使用するコンポーネントに要求をリダイレクトして、ブックマークされたリンクの後方互換性を提供できます。
まずは元のコンポーネントを、その定義、コントローラ、ヘルパー、レンダラ、CSS を含めてコピーします。新しいコンポーネント実装を lightning:isUrlAddressable インターフェースにします。
cmp.get("v.pageReference").state からのナビゲーション要求で渡された値を読み取るように新しいコンポーネントを変更します。
新しいコンポーネントで、コンポーネントの init ハンドラでページの state の値をコピーするのに使用されていない URL から対応付けられた属性を削除します。
古いコンポーネントに移動するインスタンスを新しい API と新しいコンポーネントのアドレスに変更します。たとえば、$A.get("e.force:navigateToComponent").setParams({componentDef: "c:oldCmp", attributes: {"myAttr": "foo"}}).fire(); などの force:navigateToComponent のインスタンスを削除します。
1cmp.find("navigationService").navigate({
2 type: "standard__component",
3 attributes: {
4 name: "c:myCmpCopy" },
5 state: { "c__myAttr": "foo" }});1({
2 init: function(cmp, event, helper) {
3 cmp.find("navigation").navigate({
4 type: "standard__component",
5 attributes: {
6 componentName: "c__componentB" },
7 state: {
8 c__myAttr: cmp.get("v.myAttr")
9 }
10 }, true); // replace = true
11 }
12})