NativeScript - การจัดการเหตุการณ์
ในทุกแอปพลิเคชัน GUI เหตุการณ์มีบทบาทสำคัญมากในการเปิดใช้งานการโต้ตอบกับผู้ใช้ เมื่อใดก็ตามที่ผู้ใช้โต้ตอบกับแอปพลิเคชันเหตุการณ์จะเริ่มทำงานและการดำเนินการที่เกี่ยวข้องจะดำเนินการ
ตัวอย่างเช่นเมื่อผู้ใช้คลิกปุ่มเข้าสู่ระบบในหน้าเข้าสู่ระบบของแอปพลิเคชันจะเรียกกระบวนการเข้าสู่ระบบ
เหตุการณ์เกี่ยวข้องกับนักแสดงสองคน -
Event sender - วัตถุที่เพิ่มเหตุการณ์จริง
Event listener - ฟังก์ชั่นที่รับฟังเหตุการณ์เฉพาะและดำเนินการเมื่อเหตุการณ์เริ่มทำงาน
ระดับที่สังเกตได้
เป็นคลาสที่กำหนดไว้ล่วงหน้าเพื่อจัดการกับเหตุการณ์ต่างๆ มีการกำหนดไว้ด้านล่าง -
const Observable = require("tns-core-modules/data/observable").Observable;
ใน NativeScript เกือบทุกอ็อบเจ็กต์มาจากคลาส Observable และอ็อบเจ็กต์ทุกตัวรองรับเหตุการณ์
Listener เหตุการณ์
ให้เราเข้าใจวิธีการสร้างวัตถุและเพิ่มตัวฟังเหตุการณ์ให้กับวัตถุในบทนี้
ขั้นตอนที่ 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
ตอนนี้แนบเหตุการณ์การแตะเข้ากับฟังก์ชัน onTap ตามที่ระบุด้านล่าง -
testButton.on("tap", onTap, this);
วิธีอื่นในการเพิ่มผู้ฟังเหตุการณ์มีดังนี้ -
testButton.addEventListener("tap", onTap, this);
ขั้นตอนที่ 5
อีกวิธีหนึ่งในการแนบเหตุการณ์คือผ่าน UI ตามที่ระบุด้านล่าง -
<Button text="click" (tap)="onTap($event)"></Button>
ที่นี่
$ event เป็นประเภท EventData EventData มีคุณสมบัติสองอย่างและมีดังต่อไปนี้ -
Object- อินสแตนซ์ที่สังเกตได้ซึ่งใช้เพื่อเพิ่มเหตุการณ์ ในสถานการณ์นี้เป็นวัตถุปุ่ม
EventName- เป็นชื่อเหตุการณ์ ในสถานการณ์นี้เป็นเหตุการณ์การแตะ
ขั้นตอนที่ 6
ในที่สุดผู้ฟังเหตุการณ์สามารถถอด / ลบออกได้ตลอดเวลาตามที่ระบุด้านล่าง -
testButton.off(Button.onTap);
คุณยังสามารถใช้รูปแบบอื่นได้ตามที่แสดงด้านล่าง -
testButton.removeEventListener(Button.onTap);
การแก้ไข BlankNgApp
ให้เราแก้ไขแอปพลิเคชัน BlankNgApp เพื่อให้เข้าใจเหตุการณ์ใน NativeScript ได้ดีขึ้น
ขั้นตอนที่ 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