NativeScript-イベント処理
すべてのGUIアプリケーションで、イベントはユーザーとの対話を可能にする非常に重要な役割を果たします。ユーザーがアプリケーションを操作するたびに、イベントが発生し、対応するアクションが実行されます。
たとえば、ユーザーがアプリケーションのログインページで[ログイン]ボタンをクリックすると、ログインプロセスがトリガーされます。
イベントには2人の俳優が関与します-
Event sender −実際のイベントを発生させるオブジェクト。
Event listener −関数。特定のイベントをリッスンし、イベントが発生したときに実行されます。
観測可能なクラス
これは、イベントを処理するための事前定義されたクラスです。以下に定義されています-
const Observable = require("tns-core-modules/data/observable").Observable;
NativeScriptでは、ほとんどすべてのオブジェクトがObservableクラスから派生しているため、すべてのオブジェクトがイベントをサポートします。
イベントリスナー
この章では、オブジェクトを作成し、イベントリスナーをオブジェクトに追加する方法を理解しましょう。
ステップ1
以下に指定するように、イベントを生成するために使用されるボタンを作成します-
const Button = require("tns-core-modules/ui/button").Button;
const testButton = new Button();
ステップ2
次に、以下に指定されているようにボタンにテキストを追加します-
testButton.text = "Click";
ステップ3
以下に指定するように、onTap関数を作成します-
let onTap = function(args) {
console.log("you clicked!");
};
ステップ4
次に、以下に指定するように、tapイベントをonTap関数にアタッチします-
testButton.on("tap", onTap, this);
イベントリスナーを追加する別の方法は次のとおりです-
testButton.addEventListener("tap", onTap, this);
ステップ5
イベントを添付する別の方法は、以下に指定するUI自体を使用することです。
<Button text="click" (tap)="onTap($event)"></Button>
ここに、
$ eventのタイプはEventDataです。EventDataには2つのプロパティが含まれており、それらは次のとおりです。
Object−イベントを発生させるために使用される監視可能なインスタンス。このシナリオでは、それはButtonオブジェクトです。
EventName−イベント名です。このシナリオでは、タップイベントです。
ステップ6
最後に、イベントリスナーは、以下に指定されているように、いつでもデタッチ/削除できます。
testButton.off(Button.onTap);
以下に示すように、別の形式を使用することもできます-
testButton.removeEventListener(Button.onTap);
BlankNgAppの変更
NativeScriptのイベントをよりよく理解するために、BlankNgAppアプリケーションを変更してみましょう。
ステップ1
ホームコンポーネントのUIを開き、 src/app/home/home.component.html 以下のコードを追加します-
<ActionBar>
<Label text="Home"></Label>
</ActionBar>
<StackLayout>
<Button text='Fire an event' class="-primary" color='gray' (tap)='onButtonTap($event)'></Button>
</StackLayout>
ここに、
タップはイベントで、ボタンはイベントレイザーです。
onButtonTapはイベントリスナーです。
ステップ2
ホームコンポーネントのコードを開き、 ‘src/app/home/home.component.ts’ 以下のコードを更新します-
import { Component, OnInit } from "@angular/core";
import { EventData } from "tns-core-modules/data/observable";
import { Button } from "tns-core-modules/ui/button"
@Component({
selector: "Home",
templateUrl: "./home.component.html"
})
export class HomeComponent implements OnInit {
constructor() {
// Use the component constructor to inject providers.
}
ngOnInit(): void {
// Init your component properties here.
}
onButtonTap(args: EventData): void {
console.log(args.eventName);
const button = <Button>args.object;
console.log(button.text);
}
}
ここに、
新しいイベントリスナーonButtonTapが追加されました。
イベント名を印刷し、テキストをタップしてボタンを押し、コンソールでイベントを発生させます。
ステップ3
アプリケーションを実行し、ボタンをタップします。以下の行をコンソールに出力します。
LOG from device <device name>: tap
LOG from device <device name>: Fire an event