답변:
방금 이벤트 입력을 사용했으며 다음과 같이 정상적으로 작동했습니다.
.html 파일에서 :
<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">
.ts 파일에서 :
onSearchChange(searchValue: string): void {
console.log(searchValue);
}
사용 ngModelChange
위쪽 파괴함으로써 [(x)]
그 두 가지, 즉, 속성 데이터 바인딩 및 이벤트 바인딩에 구문 :
<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
mymodel = newValue;
console.log(newValue)
}
백 스페이스 키에서도 작동합니다.
이유를 보자 :
keyup
그러나 가장 안전한 옵션 중 하나이지만 input
이벤트는 한 걸음 앞서 keyup
있습니다. keyup
와 달리 input
텍스트 상자의 값이 바인딩과 같은 다른 방법으로 변경되면 작동하지 않습니다.
(change)
. 허용 된 답변은 완전히 짜증납니다!
(ngModelChange)
있습니까?
<input type="text" [ngModel]="mymodel" (keypress)="mymodel=$event.target.value"/>
{{mymodel}}
keydown
또는 keyup
대신 사용할 수 있습니다 . 일부 키는 작동하지 않습니다 keypress
. 또한 참조 stackoverflow.com/questions/4843472/...
이러한 경우를 처리하는 다른 방법은 formControl 을 사용 하고 valueChanges
구성 요소가 초기화 될 때 구독 하는 것입니다 .http 요청 수행과 같은 고급 요구 사항에 rxjs 연산자 를 사용 하고 문장 작성이 끝날 때까지 디 바운스를 적용하고 마지막 값을 취할 수 있습니다 이전을 생략하고 ...
import {Component, OnInit} from '@angular/core';
import { FormControl } from '@angular/forms';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
@Component({
selector: 'some-selector',
template: `
<input type="text" [formControl]="searchControl" placeholder="search">
`
})
export class SomeComponent implements OnInit {
private searchControl: FormControl;
private debounce: number = 400;
ngOnInit() {
this.searchControl = new FormControl('');
this.searchControl.valueChanges
.pipe(debounceTime(this.debounce), distinctUntilChanged())
.subscribe(query => {
console.log(query);
});
}
}
FormGroup