Sự kiện trong DOM

Trong DOM HTML có nhiều loại sự kiện được phát ra trong những ngữ cảnh cụ thể, như sự kiện onclick khi bấm vào một phần tử nào đó, trong JavaScript đã biết cách phát đi sự kiện, lắng nghe các sự kiện cụ thể xem tại: Lắng nghe sự kiện trên DOMTạo và phát một sự kiện DOM HTML.

Tương tự khi sử dụng thư viện JQuery để bắt dự kiện xem tại Bắt sự kiện với JQuery

Trong phần này sẽ tìm hiểu sử dụng Dart làm việc với các sự kiện tùy chọn tạo ra.

Tạo và kích hoạt một sự kiện trong Dart

Để tạo ra một sự kiện tùy chọn ta dùng tới lớp CustomEvent (thuộc thư viện dart:html), giả sự cần tạo một sự kiện có tên là myevent thì khai báo khởi tạo với tên sự kiện và dữ liệu chứa trong nó nếu có (detail):

CustomEvent mevent = new CustomEvent("myevent", detail: "Đây là dữ liệu");

Sau khi có sự kiện, muốn phát sự kiện đó từ phần tử HtmlElement nào thì gọi phương thức dispatchEvent(mevent)

Ví dụ sau, sẽ tạo ra một một phần tử HTML button, khi bấm vào nó thì nó phát đi một sự kiện có tên myevent

//Tạo phần tử HTML Button
HtmlElement btn = Element.tag('button');
btn.text = "Bấm vào đây";

//Bắt sự kiện khi bấm vào nó
btn.onClick.listen((e) {
  //Tạo sự kiện tùy biến
  CustomEvent mevent = new CustomEvent("myevent", detail: "Dữ liệu trong gửi đi ABC");
  //phát sự kiện myevent
  e.target.dispatchEvent(mevent);
});
//Chèn phần tử tạo vào body
querySelector('body').children.add(btn);

Như vậy mỗi khi bấm vào nút bấm thì sự kiện có tên myevent được tạo ra và phát đi trong hệ thống DOM, phần sau sẽ tìm cách bắt sự kiện đó!

Lắng nghe sự kiện trong Dart

Để bắt được sự kiện nào đó, thì ở phần tử DOM cụ thể nào đó (window, Element ...) cần cho nó lắng nghe sự kiện đó, làm điều này bằng cách thêm một Listener cho đối tượng bằng phương thức addEventListener

Ví dụ, cho đối tượng window lắng nghe sự kiện myevent ở trên, để mỗi khi sự kiện này phát đi thì nó được bắt lại ở đây:

window.addEventListener('myevent', (e) {
    CustomEvent ev = e as CustomEvent;
    window.alert(ev.detail.toString());
});

Toàn bộ code trên trong 1 file main.dart như sau:

import 'dart:html';

void main() async {

    HtmlElement btn = Element.tag('button');
    btn.text = "Bấm vào đây";
    btn.onClick.listen((e) {
      //Tạo sự kiện tùy biến
      CustomEvent mevent = new CustomEvent("myevent", detail: "Dữ liệu trong gửi đi ABC");
      //phát sự kiện đó đi
      e.target.dispatchEvent(mevent);
    });
    //Chèn phần tử tạo vào body
    querySelector('body').children.add(btn);


    window.addEventListener('myevent', (e) {
        CustomEvent ev = e as CustomEvent;
        window.alert(ev.detail.toString());
    });

}

Chạy thử, khi bấm vào nút bấm sự kiện đã phát đi và được window bắt lại, hiện thị lên dữ liệu

dart event
Đăng ký theo dõi ủng hộ kênh