>source

입력 할 각도 9에서 사용자 지정 지시문을 개발했습니다.숫자와 소수점 1 자리 만. 이 지시문은 데스크톱에서는 완벽하게 작동하지만 모바일에서는 작동하지 않습니다 (지시문이 입력 필드에없는 것처럼). 키 다운 이벤트를 호스트로 사용했습니다. Angular 측의 문제입니까? 참조해야하는 모든 제안 또는 기존 게시물.

편집하다

@Directive({ 
    selector: 'input[allowCurr]',
    host: { '(keydown)': 'allowND($event)' } 
})
export class AllowCurrDirective { 
    @Input() allowCurr: string;
     /* Rest of my Logic here */ 
}

allowND 함수 내부에 경고를 넣었 기 때문에이 정도를 추가했습니다. 내부로 들어가지만 사용자 키 입력을 캡처하는 데 사용했던 event.key가 정의되지 않은 상태가됩니다.

  • 답변 # 1

    시도해 볼 수 있습니다.HostListener

    import { Directive, HostListener, Input } from "@angular/core";
    @Directive({
      selector: "input[allowCurr]"
    })
    export class AllowCurrDirective {
      @HostListener("keydown", ["$event"])
      allowND(e) {
        console.log(e.key);
      }
      @Input() allowCurr: string;
      /* Rest of my Logic here */
    }
    
    

  • 답변 # 2

    마침내이 문제를 해결할 수있었습니다. 입력 상자 안에 숫자와 소수점 하나만 입력 할 수 있도록 허용하는 요구 사항을 충족하기 위해 입력 이벤트와 함께 event.target.value를 사용해야했습니다.

    :: 연구 ::

    스마트 폰 브라우저에서이 MDN URL을 엽니 다. 입력 이벤트에서 KeyboardEvent.data가 데스크톱에서 KeyboardEvent.key로 작동하는 것을 볼 수 있습니다. 즉, 스마트 폰 키보드에서 누른 키를 볼 수 있습니다. (내 스마트 폰에서도 W3schools try-it 편집기에서 확인했습니다). 그러나 문제는 KeyboardEvent.data가 iPhone과 호환되지 않는다는 것입니다. 즉, event.key도 event.data도 사용할 수 없습니다. 입력 이벤트는 취소 할 수 없습니다 (즉, event.preventDefault ()도 작동하지 않음). 따라서 입력 한 내용이 조건을 통과하지 못하면 입력 값은 다음과 같아야합니다.

    let targetVal = event.target.value;
    event.target.value = targetVal.substring(0, targetVal.length -1);
    
    

관련 자료

  • 이전 html - webscraping 키릴 문자 - rvest의 인코딩 문제
  • 다음 python - _tkintertclerror - 알 수없는 옵션"-label"