2016-01-26 20 views
13

Tôi đã bắt đầu xem xét Angular2 và có một cơ bản với 3 componenets lồng nhau làm việc. Tuy nhiên tôi không thể tìm ra cách thêm trình xử lý nhấn phím vào tài liệu.

Nếu không, làm thế nào tôi có thể nghe một phím bấm trên tài liệu và phản ứng với nó? Để rõ ràng, tôi cần trả lời một kepyress trên chính tài liệu, KHÔNG phải là đầu vào.

Trong góc 1 Tôi sẽ tạo chỉ thị và sử dụng $ document; một cái gì đó như thế này:

$document.on("keydown", function(event) { 

     // if keycode... 
     event.stopPropagation(); 
     event.preventDefault(); 

     scope.$apply(function() {    
     // update scope...   
     }); 

Nhưng tôi chưa tìm được giải pháp Angular2.

Trả lời

15

Bạn có thể làm một cái gì đó như thế này:

@Component({ 
    host: { 
    '(document:keyup)': '_keyup($event)', 
    '(document:keydown)': '_keydown($event)', 
    }, 
}) 
export class Component { 
    private _keydown(event: KeyboardEvent) { 
    let prevent = [13, 27, 37, 38, 39, 40] 
     .find(no => no === event.keyCode); 
    if (prevent) event.preventDefault(); 
    } 
    private _keyup(event: KeyboardEvent) { 
    if (event.keyCode === 27) this.close(); 
    else if (event.keyCode === 13) ...; 
    else if (event.keyCode === 37) ...; 
    else if (event.keyCode === 38) ...; 
    else if (event.keyCode === 39) ...; 
    else if (event.keyCode === 40) ...; 

    // else console.log(event.keyCode); 
    } 
} 

BTW, đội kiễu góc đã có một số thú vị ideas about keyboard events, không chắc chắn tình trạng này tại thời điểm này là những gì. Thậm chí có thể là it's working, không thử bản thân mình :)

+0

Tôi chưa thấy cú pháp 'document: keyup' trước đây. Bạn có bất kỳ tài liệu tham khảo cho rằng để tôi có thể tìm hiểu thêm? –

+0

@MarkRajcok Không chắc chắn nơi tôi tìm thấy nó lần đầu tiên .. Tôi biết tôi đã thấy '' tại [Hướng dẫn dành cho nhà phát triển] chính thức (https: // angular.io/docs/ts/latest/guide/user-input.html) - tìm kiếm ** Lọc sự kiện khóa ** ... Tôi sẽ cố tìm nơi tôi nhận cú pháp 'document: _event_'. Làm việc với 'cửa sổ: nhấp vào' quá, ví dụ. – Sasxa

+1

@MarkRajcok Tôi đang tìm kiếm "nhấp vào bên ngoài" một thời gian trước đây và tôi đã tìm thấy mã cho [Angular2 Modal] (https://github.com/shlomiassaf/angular2-modal/blob/master/src/angular2-modal/ components/bootstrapModalContainer.ts). Sau đó, tôi đã xem qua mã nguồn cho [key_events] (https://github.com/angular/angular/blob/master/modules/angular2/src/platform/dom/events/key_events.ts) và với một số thử nghiệm tôi nhận được theo cú pháp này ... – Sasxa

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