Клавиша Shift работает как клавиша Caps Lock в ngx-material-keyboard - PullRequest
0 голосов
/ 12 февраля 2019

Я использую ngx-material-keyboard в моем приложении Angular.
Я заметил, что клавиша Shift ведет себя странно, когда нажимается / нажимается:

  • ожидается: после изменения строчных букв в верхний регистр, при нажатии одной из этих заглавных букв клавиатура автоматически переключается обратно в нижний регистр
  • наблюдается: после изменения нижнегорегистр букв в верхнем регистре, при нажатии на одну из этих заглавных букв клавиатура остается в верхнем регистре (клавиша Shift ведет себя так же, как заглавная клавиша )

Мое ожидание исходит от экранных клавиатур на моем телефоне (например, в приложениях чата).Является ли мое ожидание действительным и оправдано ли мое раздражение ?

Воспроизведите его здесь самостоятельно: демоверсия ngx-material-keyboard

Насколько я вижу, никто не создавал проблему , что я нахожу странным, поэтому сначала спрашиваю здесь (и, похоже, никто не обращался к ней и в SO).

Кто-нибудь знает как это исправить ?(Я разветвлял репо, поэтому я могу изменить код , но, к сожалению, я не могу понять, как происходит переключение буквенных символов и как заставить обработчик переключения переключаться в верхний регистр только одним щелчком мышивместо того, чтобы навсегда.)

Вот части кода, которые я считаю интересными:

В keyboard.compontents.ts:

public onShiftClick(): void {
    this.modifier = MatKeyboardComponent.invertShiftModifier(this.modifier);
    this.shiftClick.next();
}

private static invertShiftModifier(modifier: KeyboardModifier): KeyboardModifier {
    switch (modifier) {
        case KeyboardModifier.None:
            return KeyboardModifier.Shift;

        case KeyboardModifier.Alt:
            return KeyboardModifier.ShiftAlt;

        case KeyboardModifier.ShiftAlt:
            return KeyboardModifier.Alt;

        case KeyboardModifier.Shift:
            return KeyboardModifier.None;
    }
}

И в компоненте клавиатуры-клавиши.ts:

public onClick(event: MouseEvent): void {
[...]

// TODO: if current modifier is KeyboardModifier.Shift
// do the invert
}

1 Ответ

0 голосов
/ 13 февраля 2019

Я сам смог найти рабочее решение.
Функция onClick () уже предоставляет this.genericClick.emit (событие).Этот излучатель можно использовать для сброса сдвига после нажатия на одну клавишу.Решение также работает правильно, если активна блокировка прописных букв.

В keyboard.component.html добавьте genericClick:

<vwlmz-keyboard-key class="mat-keyboard-col"
    [...]
    (enterClick)="onEnterClick()"
    (genericClick)="onKeyClick()" // add this line
    (capsClick)="onCapsClick()"
    (altClick)="onAltClick()"
    (shiftClick)="onShiftClick()"></vwlmz-keyboard-key>

В keyboard.component.ts добавьте:

public enterClick: EventEmitter<void> = new EventEmitter<void>();

public onKeyClick(): void {
    this.genericClick.next();

    // reset shift after clicking a key
    if (this.modifier === KeyboardModifier.Shift) {
        this.modifier = MatKeyboardComponent.invertShiftModifier(KeyboardModifier.Shift);
    }
}
...