回答:
私はイベント入力を使用しただけで、次のように正常に機能しました。
.htmlファイル内:
<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">
.tsファイル内:
onSearchChange(searchValue: string): void {
console.log(searchValue);
}
構文を2つの部分(プロパティデータバインディングとイベントバインディング)にngModelChange
分割して使用し[(x)]
ます。
<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
mymodel = newValue;
console.log(newValue)
}
バックスペースキーにも使用できます。
その理由を見てみましょう:
keyup
は確かに最も安全なオプションの1つですが、input
イベントはの1ステップ先です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
<input type="text" (keypress)="myMethod(myInput.value)" #myInput />
アーカイブ.ts
myMethod(value:string){
...
...
}
私は数値フィールドでキーアップを使用していましたが、今日、クロムで入力にキーアップで認識されない値を増減するための上下ボタンがあることに気付きました。
私の解決策は、キーアップを使用して一緒に変更することです:
(keyup)="unitsChanged[i] = true" (change)="unitsChanged[i] = true"
最初のテストでは、これが正常に機能することを示し、さらなるテストの後にバグが見つかった場合はポストバックします。