この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

コンポーネントへのイベントハンドラの動的な追加

コンポーネントから起動されるイベントのハンドラを動的に追加できます。

Component コンポーネントの addEventHandler() メソッドは、廃止された addHandler() メソッドの代わりに使用されます。

コンポーネントにイベントハンドラを動的に追加するには、addEventHandler() メソッドを使用します。

1addEventHandler(String event, Function handler, String phase, String includeFacets)
event
最初の引数は、ハンドラをトリガするイベントの名前です。コンポーネントから起動しないイベントの起動開始をコンポーネントに強制することはできないため、コンポーネントから起動するイベントに、この引数が対応することを確認してください。コンポーネントのマークアップの <aura:registerEvent> タグにより、コンポーネントから起動するイベントが公開されます。
  • コンポーネントイベントの場合、<aura:registerEvent> タグの name 属性と一致するようにこの引数を設定します。
  • アプリケーションイベントの場合、namespace:eventName 形式のイベント記述子と一致するようにこの引数を設定します。
handler
2 つ目の引数は、イベントを処理するアクションです。ハンドラをマークアップで静的に定義した場合、<aura:handler> タグの action 属性に指定する値と似ています。この引数には 2 つのオプションがあります。
  • コントローラアクションを使用するには、cmp.getReference("c.actionName") 形式を使用します。
  • 匿名関数を使用するには、次の形式を使用します。
    1function(auraEvent) {
    2    // handling logic here
    3}

その他の引数の説明については、ドキュメント参照アプリケーションの JavaScript API を参照してください。

$A.createComponent() のコールバック関数で動的に作成されたコンポーネントにイベントハンドラを追加することもできます。詳細は、「コンポーネントの動的な作成」を参照してください。

次のコンポーネントには、コンポーネントイベントとアプリケーションイベントを起動および処理するボタンがあります。

1<!--c:dynamicHandler-->
2<aura:component >
3    <aura:registerEvent name="compEvent" type="c:sampleEvent"/>
4    <aura:registerEvent name="appEvent" type="c:appEvent"/>
5    <h1>Add dynamic handler for event</h1>
6    <p>
7        <lightning:button label="Fire component event" onclick="{!c.fireEvent}" />
8        <lightning:button label="Add dynamic event handler for component event" onclick="{!c.addEventHandler}" />
9    </p>
10    <p>
11        <lightning:button label="Fire application event" onclick="{!c.fireAppEvent}" />
12        <lightning:button label="Add dynamic event handler for application event" onclick="{!c.addAppEventHandler}" />
13    </p>
14
15</aura:component>
クライアント側コントローラを次に示します。
1/* dynamicHandlerController.js */
2({
3    fireEvent : function(cmp, event) {
4        // Get the component event by using the
5        // name value from <aura:registerEvent> tag
6        var compEvent = cmp.getEvent("compEvent");
7        compEvent.fire();
8        console.log("Fired a component event");
9    },
10    
11    addEventHandler : function(cmp, event) {
12        // First param matches name attribute in <aura:registerEvent> tag
13        cmp.addEventHandler("compEvent", cmp.getReference("c.handleEvent"));
14        console.log("Added handler for component event");
15    },
16
17    handleEvent : function(cmp, event) {
18        alert("Handled the component event");
19    },
20
21    fireAppEvent : function(cmp, event) {
22        var appEvent = $A.get("e.c:appEvent");
23        appEvent.fire();
24        console.log("Fired an application event");
25    },
26    
27    addAppEventHandler : function(cmp, event) {
28        // Can use cmp.getReference() or anonymous function for handler
29        // First param is event descriptor, "c:appEvent", for application events
30        cmp.addEventHandler("c:appEvent", cmp.getReference("c.handleAppEvent"));
31        // Can alternatively use anonymous function for handler
32        //cmp.addEventHandler("c:appEvent", function(auraEvent) {
33            // console.log("Handled the application event in anonymous function");
34        //});
35        console.log("Added handler for application event");
36    },
37
38    handleAppEvent : function(cmp, event) {
39        alert("Handled the application event");
40    }         
41})

addEventHandler() コールの最初のパラメータに注目します。コンポーネントイベントの構文は次のようになっています。

1cmp.addEventHandler("compEvent", cmp.getReference("c.handleEvent"));

アプリケーションイベントの構文は次のようになっています。

1cmp.addEventHandler("c:appEvent", cmp.getReference("c.handleAppEvent"));

コンポーネントイベントまたはアプリケーションイベントでは、コントローラアクションの cmp.getReference() を使用する代わりに、匿名関数をハンドラとして使用できます。

たとえば、アプリケーションイベントハンドラは次のようになります。

1cmp.addEventHandler("c:appEvent", function(auraEvent) {
2    // add handler logic here
3    console.log("Handled the application event in anonymous function");
4});