Відповіді:
Я щойно використовував вхід події, і він працював чудово так:
у .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
коли ваш компонент ініціалізований, що дозволить вам використовувати оператори rxjs для розширених вимог, таких як виконання запитів http, застосовувати дебютацію, поки користувач не закінчить писати речення, прийме останнє значення і опустити попередній, ...
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
Секрет подія , яке зберігає кутовий ngModel синхронним є виклик події введення . Тому найкращою відповіддю на ваше запитання має бути:
<input type="text" [(ngModel)]="mymodel" (input)="valuechange($event)" />
{{mymodel}}
<input type="text" (keypress)="myMethod(myInput.value)" #myInput />
архів .ts
myMethod(value:string){
...
...
}
Що ви шукаєте, так і є
<input type="text" [(ngModel)]="mymodel" (keyup)="valuechange()" />
{{mymodel}}
Потім виконайте все, що завгодно з даними, відкривши прив’язаний this.mymodel
файл .ts.
У моєму випадку рішення таке:
[ngModel]="X?.Y" (ngModelChange)="X.Y=$event"
Для Реактивних форм ви можете підписатися на зміни, внесені до всіх полів або лише до певного поля.
Отримати всі зміни FormGroup:
this.orderForm.valueChanges.subscribe(value => {
console.dir(value);
});
Отримайте зміну конкретного поля:
this.orderForm.get('orderPriority').valueChanges.subscribe(value => {
console.log(value);
});
Я використовую клавіатуру в числовому полі, але сьогодні я помітив, що в хромі на вході є кнопки вгору / вниз для збільшення / зменшення значення, яке не розпізнається клавіатурою.
Моє рішення - використовувати клавіш і змінювати разом:
(keyup)="unitsChanged[i] = true" (change)="unitsChanged[i] = true"
Початкові тести вказують, що це працює нормально, опублікується, якщо помилки знайдені після подальшого тестування.