2016-01-26 4 views
13

Я начал изучать Angular2 и имел базовый уровень с 3 вложенными компонентами, работающими. Однако я не могу понять, как добавить обработчик нажатия клавиши в документ.

Если нет, то как я могу прослушать нажатие на документ и отреагировать на него? Чтобы быть ясным, мне нужно ответить на кепресс на самом документе, а не на вход.

In Angular 1 Я бы создал директиву и использовал $ document; что-то вроде этого:

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

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

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

Но мне еще не найти решение Angular2.

ответ

15

Вы можете сделать что-то вроде этого:

@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, Угловая команды имела некоторые интересные ideas about keyboard events, не уверен, что статус этого в данный момент. Возможно даже it's working, не пробовал себя :)

+0

Я еще не видел синтаксис 'document: keyup'. У вас есть ссылки на это, чтобы я мог узнать больше? –

+0

@MarkRajcok Не знаю, где я нашел его в первый раз .. Я знаю, что видел '' на официальных [Guides Guide] (https: // angular.io/docs/ts/latest/guide/user-input.html) - найдите ** Фильтрацию ключевых событий ** ... Я попытаюсь найти, где я получил синтаксис 'document: _event_'. Например, работает с «window: click». – Sasxa

+1

@MarkRajcok Я искал «click out» некоторое время назад, и нашел код для [Angular2 Modal] (https://github.com/shlomiassaf/angular2-modal/blob/master/src/angular2-modal/ компоненты/bootstrapModalContainer.ts). После этого я просмотрел исходный код для [key_events] (https://github.com/angular/angular/blob/master/modules/angular2/src/platform/dom/events/key_events.ts) и с некоторыми экспериментами, которые я получил к этому синтаксису ... – Sasxa

Смежные вопросы