2014-11-01 19 views
6

Từ ngTouch ngClick documentation:ngTouch ngClick không làm bong bóng

Một thay thế mạnh mẽ hơn đối với mặc định ngClick thiết kế để được sử dụng trên các thiết bị màn hình cảm ứng. Hầu hết các trình duyệt di động đều đợi khoảng 300ms sau khi nhấn và thả trước khi gửi sự kiện nhấp. Phiên bản này xử lý chúng ngay lập tức, và sau đó ngăn chặn sự kiện bấm sau đây từ tuyên truyền.

Điều này tạo ra hành vi không nhất quán trong đó trên máy tính, sự kiện nhấp tiếp tục bong bóng/tuyên truyền, nhưng trên thiết bị di động, nó dừng lại. Điều này có nghĩa là bất kỳ chỉ thị nào cao hơn trong dom nghe các nhấp chuột phần tử đều thất bại. Có vẻ như là một lỗi đối với tôi, nhưng tôi không phải là người đầu tiên phải làm việc này.

Nếu bạn nhìn vào ngTouch code, the problem stems from line 453

element.triggerHandler('click', [event]); 

Angular docs:

angular.element đại biểu đến góc tích hợp trong tập hợp con của jQuery, được gọi là "jQuery lite" hoặc "jqLite."

jqLite có quyền truy cập vào jQuery triggerHandler, nhưng không phải trigger.

jQuery docs:

Các .triggerHandler() phương pháp hành xử tương tự như .trigger(), với những ngoại lệ sau:

  • Sự kiện kích hoạt với .triggerHandler() không bong bóng lên DOM hệ thống cấp bậc; nếu chúng không được xử lý trực tiếp bởi phần tử đích, chúng sẽ không làm gì cả.

Vì vậy, các folks góc cần thêm trigger hỗ trợ cho jqLite và thay đổi dòng để trigger cho nó hoạt động tốt.

Trong thời gian chờ đợi, tôi có thể giải quyết vấn đề này bằng cách nào? Có cách nào để sử dụng ngClick bên trong của một chỉ thị tùy chỉnh?


Bonus cho cười: Comment from the ngTouch source code

// This is an ugly, terrible hack! 
// Yeah, tell me about it. 

Trả lời

2

tôi đã thay thế dòng 453 với

element[0].dispatchEvent(new MouseEvent('click', event)); 

Nó làm việc như mong đợi cho bây giờ. Bạn không chắc chắn về khả năng tương thích của trình duyệt là như thế nào đối với new MouseEvent(), vì vậy vui lòng bình luận nếu bạn đang có.

2

ngoài giải pháp trên, tôi cũng phải thêm ng-click = "" vào mỗi neo của tôi để thực hiện công việc này.

lưu ý: tôi có thể muốn viết điều này làm nhận xét nhưng lưu lượng truy cập không cảm thấy tôi đã giành được quyền. lấy làm tiếc.

Các vấn đề liên quan