Tôi đang cố viết một chỉ thị thuộc tính Angular2 để sửa đổi hành vi của các phần tử nhất định. Cụ thể hơn, tôi muốn áp dụng một thuộc tính cho các phần tử nhất định có trình xử lý nhấp chuột và ngăn hàm bị ràng buộc được thực hiện trong các điều kiện nhất định.Angular2 Chỉ thị để sửa đổi xử lý nhấp chuột
Vì vậy, bây giờ tôi có một yếu tố ví dụ .:
<button (click)="onClick(param1, param2)"></button>
onClick là một hàm tuyên bố trên thành phần mà chủ các yếu tố nút làm một số công việc.
Những gì tôi muốn làm là viết một cái gì đó như:
<button (click)="onClick(param1, param2)" online-only></button>
và có một chỉ thị như:
@Directive({
selector: '[online-only]',
})
export class OnlineOnlyDirective {
@HostListener('click', ['$event'])
onClick(e) {
if(someCondition){
e.preventDefault();
e.stopPropagation();
}
}
}
Nhưng bấm điều khiển được thực hiện đầu tiên, do đó không đưa ra chỉ thị của tôi cơ hội để ngừng thực hiện nó.
Cách tiếp cận thứ hai mà tôi đã nghĩ đến là thay thế (bấm) bằng trình xử lý của riêng tôi ([onlineClick] = "onClick") và thực thi hàm đã truyền khi chỉ thị cho rằng phù hợp, nhưng theo cách này tôi không thể chuyển tham số đến hàm onClick và có một chút lạ lùng để nhìn vào.
Bạn có bất kỳ suy nghĩ nào về việc làm điều gì đó như vậy không?
Yeap, tốt hơn là nên sử dụng phương pháp 2 được mô tả của tôi. Sử dụng EventEmitter thay vì truyền trong hàm để gọi tạo ra tất cả sự khác biệt. Cách tiếp cận đầu tiên sẽ thanh lịch hơn, nhưng có lẽ không được hỗ trợ bởi angular2 như bạn đã nói. – masimplo
Chỉ tò mò nếu bộ chọn được cho là '[chỉ trực tuyến]'? Cố gắng tìm ra những gì đã xảy ra với chỉ thị đó. –
Tôi không biết liệu 'cách trực tuyến' có liên quan đến câu hỏi hay không –