L'événement de modification n'est appelé qu'une fois que le focus de l'entrée a été modifié. Comment puis-je faire en sorte que l'événement se déclenche à chaque pression de touche?
<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}
La deuxième liaison change à chaque pression de touche.
Je viens d'utiliser l'entrée d'entrée et cela a bien fonctionné comme suit:
dans le fichier .html:
<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">
dans le fichier .ts:
onSearchChange(searchValue: string): void {
console.log(searchValue);
}
Utilisez ngModelChange
en décomposant la syntaxe [(x)]
en deux parties, à savoir propriété, liaison de données et liaison d’événement:
<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
mymodel = newValue;
console.log(newValue)
}
Cela fonctionne aussi pour la touche Retour arrière.
Voyons pourquoi:
<input type="text" [ngModel]="mymodel" (keypress)="mymodel=$event.target.value"/>
{{mymodel}}
Une autre façon de gérer de tels cas consiste à utiliser formControl et à souscrire à valueChanges
lorsque votre composant est initialisé, ce qui vous permettra d'utiliser rxjs opérateurs pour les exigences avancées comme effectuer des requêtes http, appliquer un anti-rebond jusqu'à ce que l'utilisateur ait fini d'écrire une phrase, prendre la dernière valeur et omettre les options précédentes, ...
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);
});
}
}
L'événement secret qui garde angular ngModel synchrone est l'appel à l'événement entrée. La meilleure réponse à votre question devrait donc être:
<input type="text" [(ngModel)]="mymodel" (input)="valuechange($event)" />
{{mymodel}}
<input type="text" (keypress)="myMethod(myInput.value)" #myInput />
archive .ts
myMethod(value:string){
...
...
}
Ce que tu recherches, c'est
<input type="text" [(ngModel)]="mymodel" (keyup)="valuechange()" />
{{mymodel}}
Ensuite, faites ce que vous voulez avec les données en accédant au this.mymodel
lié de votre fichier .ts.
Dans mon cas, la solution est:
[ngModel]="X?.Y" (ngModelChange)="X.Y=$event"