アクセスの制御
access システム属性は次のタグで使用します。
- <aura:application>
- <aura:attribute>
- <aura:component>
- <aura:event>
- <aura:interface>
- <aura:method>
アクセス値
access システム属性には、次の値を指定できます。
- private
- コンポーネント、アプリケーション、インターフェース、イベント、メソッド内では使用できますが、リソース外からは参照できません。この値は、<aura:attribute> または <aura:method> にのみ使用できます。
- 属性を非公開とマークすると、属性をリソース内でのみ使用可能になるため、その後属性のリファクタリングが容易になります。
- 非公開属性にアクセスすると、宣言したコンポーネントから参照した場合を除き、undefined が返されます。非公開属性が含まれるコンポーネントを拡張するサブコンポーネントから非公開属性にアクセスすることはできません。
- public
- 組織内でのみ使用できます。これはデフォルトのアクセス値です。
- global
- すべての組織で使用できます。
例
次のサンプルコンポーネントにはグローバルアクセス権があります。
1<aura:component access="global">
2 ...
3</aura:component>アクセス違反
リソースへのアクセスを許可する access システム属性のないコンポーネントなどのリソースにコードがアクセスすると、次のようになります。
- クライアント側のコードは実行されないか、undefined を返します。 デバッグモードを有効にした場合は、ブラウザコンソールにエラーメッセージが表示されます。
- サーバ側のコードは、コンポーネントの読み込みに失敗します。 デバッグモードを有効にした場合は、ポップアップエラーメッセージが表示されます。
アクセス権チェックエラーメッセージの構造
アクセス違反のアクセス権チェックエラーメッセージのサンプルを次に示します。
1Access Check Failed ! ComponentService.getDef():'markup://c:targetComponent' is not visible to 'markup://c:sourceComponent'.エラーメッセージは、次の 4 つの部分で構成されます。
- コンテキスト (誰がリソースにアクセスしようとしているか)。この例では、markup://c:sourceComponent です。
- 対象 (アクセスされているリソース)。この例では、markup://c:targetComponent です。
- エラーの種類。この例では、not visible です。
- エラーをトリガしたコード。通常はクラスメソッドです。この例では、対象定義 (コンポーネント) にアクセスできなかったことを示す ComponentService.getDef() です。定義には、コンポーネントなどのリソースのメタデータが記述されます。
アクセス権チェックエラーの修正
アクセス権チェックエラーは、次の 1 つ以上の方法を使用して修正できます。
- 所有するリソースに適切な access システム属性を追記する。
- 使用できないリソースへの参照をコードから削除する。前の例では markup://c:targetComponent に markup://c:sourceComponent からのアクセスを許可するアクセス値はありません。
-
<aura:attribute> 定義を参照して、アクセスしている属性が存在することを確認する。name の大文字小文字の区別も含め正しいスペルを使用していることを確認します。
未定義属性にアクセスした場合も非公開属性などの範囲外の属性にアクセスした場合も、同じアクセス違反メッセージがトリガされます。アクセスコンテキストでは属性が未定義であるかアクセスできないかを判断できません。
例: is not visible to 'undefined'
1ComponentService.getDef():'markup://c:targetComponent' is not visible to 'undefined'このエラーメッセージのキーワードは、フレームワークがコンテキストを失ったことを示す undefined です。これは、setTimeout() または setInterval() コールや ES6 Promise など、通常のフレームワークライフサイクル外でコードがコンポーネントにアクセスすると発生します。
このエラーを修正するには、コードを $A.getCallback() コールでラップトップします。詳細は、「フレームワークのライフサイクル外のコンポーネントの変更」を参照してください。
例: Cannot read property 'Yb' of undefined
1Action failed: c$sourceComponent$controller$doInit [Cannot read property 'Yb' of undefined]このエラーメッセージは、値が undefined である変数のプロパティを参照した場合に表示されます。このエラーはさまざまな状況で発生する可能性がありますが、その一例がアクセス権チェックに失敗した場合の副次的影響です。たとえば、JavaScript で未定義属性である imaginaryAttribute にアクセスしようとするとどうなるか見てみましょう。
1var whatDoYouExpect = cmp.get("v.imaginaryAttribute");これはアクセス権チェックエラーで、whatDoYouExpect が undefined に設定されています。この場合に、whatDoYouExpect のプロパティにアクセスしようとすると、エラーが表示されます。
1Action failed: c$sourceComponent$controller$doInit [Cannot read property 'Yb' of undefined]エラーメッセージの c$sourceComponent$controller$doInit の部分は、エラーが c 名前空間にある sourceComponent コンポーネントのコントローラの doInit メソッドにあることを示しています。