Yanıtlar:
Sadece olay girişini kullandım ve aşağıdaki gibi iyi çalıştı:
.html dosyasında:
<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">
.ts dosyasında:
onSearchChange(searchValue: string): void {
console.log(searchValue);
}
Kullanım ngModelChangeyukarı kırarak [(x)]iki adet, yani mülkiyet veri bağlama ve olay bağlayıcı içine sözdizimi:
<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
mymodel = newValue;
console.log(newValue)
}
Geri tuşu için de çalışır.
Bakalım neden:
keyupancak en güvenli seçeneklerden biri olduğundan, inputetkinlik bir adım öndedir keyup. keyupaksine input, metin kutusunun değeri başka bir şekilde değiştirilirse çalışmaz, örneğin bağlama.
(change) bir geçici çözümün yanı sıra bazılarının yanı sıra ele alınacak tek yanıt olduğu için Kabul Edilen Yanıt olmalıdır . Kabul edilen cevap tamamen berbat!
(ngModelChange)mı?
<input type="text" [ngModel]="mymodel" (keypress)="mymodel=$event.target.value"/>
{{mymodel}}
keydownveya kullanmak isteyebilirsiniz keyup. Bazı tuşlar ateş etmiyor keypress. Ayrıca bkz stackoverflow.com/questions/4843472/…
Bu tür durumları ele almanın farklı bir yolu, formControl'ü kullanmak ve valueChangesbileşeniniz başlatıldığında ona abone olmaktır ; bu, http isteklerini yerine getirmek, kullanıcı bir cümle yazmayı bitirene kadar son kez almak, son değeri almak için röportaj uygulamanızı sağlar. ve daha önce atlayın, ...
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
Açısal ngModel'i senkronize tutan gizli olay, olay çağrısı girdisidir . Bu nedenle, sorunuzun en iyi yanıtı şöyle olmalıdır:
<input type="text" [(ngModel)]="mymodel" (input)="valuechange($event)" />
{{mymodel}}
<input type="text" (keypress)="myMethod(myInput.value)" #myInput />
arşiv .ts
myMethod(value:string){
...
...
}
Aradığın şey
<input type="text" [(ngModel)]="mymodel" (keyup)="valuechange()" />
{{mymodel}}
Ardından this.mymodel, .ts dosyanızdaki sınırlamaya erişerek verilerle istediğinizi yapın.
Benim durumumda, çözüm:
[ngModel]="X?.Y" (ngModelChange)="X.Y=$event"
Reaktif Formlar için tüm alanlarda veya yalnızca belirli bir alanda yapılan değişikliklere abone olabilirsiniz.
Bir FormGroup'un tüm değişikliklerini alın:
this.orderForm.valueChanges.subscribe(value => {
console.dir(value);
});
Belirli bir alanın değişikliğini alın:
this.orderForm.get('orderPriority').valueChanges.subscribe(value => {
console.log(value);
});
Bir sayı alanında keyup kullanıyorum, ancak bugün kromda girişin keyup tarafından tanınmayan değeri artırmak / azaltmak için yukarı / aşağı düğmeleri olduğunu fark ettim.
Benim çözümüm keyup kullanmak ve birlikte değiştirmek:
(keyup)="unitsChanged[i] = true" (change)="unitsChanged[i] = true"
İlk testler bunun iyi çalıştığını, daha fazla testten sonra bulunan herhangi bir hata varsa geri göndereceğini gösterir.