change事件仅在输入框的焦点改变后才被调用。我该如何使它在每次按键时都触发?
<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}
顺便提一下,第二个绑定会在每次按键时更改。
change事件仅在输入框的焦点改变后才被调用。我该如何使它在每次按键时都触发?
<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}
顺便提一下,第二个绑定会在每次按键时更改。
我刚刚使用了事件输入,它的工作效果如下:
在HTML文件中:
<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">
在 .ts 文件中:
onSearchChange(searchValue: string): void {
console.log(searchValue);
}
setTimeout
来延迟搜索,并存储该函数的返回值。每次在再次执行之前,你可以通过clearTimeout
来重置延迟执行:if (this.searchDelayHandle) clearTimeout(this.searchDelayHandle); this.searchDelayHandle = setTimeout(() => ..., 1000);
- undefined通过拆分 [(x)]
语法的两个部分,即属性数据绑定和事件绑定,使用 ngModelChange
:
<input [ngModel]="x" (ngModelChange)="x = $event">
<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
mymodel = newValue;
console.log(newValue)
}
对于退格键也起作用。
让我们看看为什么:
keyup
绝对是其中最安全的选项之一,不过,input
事件比 keyup
更为先进。与 input
不同,如果文本框的值通过任何其他方式(例如绑定)更改,则 keyup
将无法工作。 - planet_hunterkeyup
如其名称所示,仅适用于按键,因此使用 Ctrl+v
粘贴时会被检测到,而使用鼠标上下文菜单粘贴则不会。 - Mart<input type="text" [ngModel]="mymodel" (keypress)="mymodel=$event.target.value"/>
{{mymodel}}
更新
https://developer.mozilla.org/en-US/docs/Web/API/Element/keypress_event
警告:由于此事件已被弃用,您应该改用beforeinput或keydown。
keydown
或 keyup
代替 keypress
。有些键在 keypress
上不会触发。另请参见 https://dev59.com/EW445IYBdhLWcg3wdqOO - Günter ZöchbauervalueChanges
,这将允许您使用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 {
public searchControl: FormControl;
public debounce: number = 400;
ngOnInit() {
this.searchControl = new FormControl('');
this.searchControl.valueChanges
.pipe(debounceTime(this.debounce), distinctUntilChanged())
.subscribe(query => {
console.log(query);
});
}
}
FormGroup
应用相同的代码。 - Vikash Kumar保持Angular ngModel同步的秘密事件就是input事件的调用。因此,对于你的问题,最好的答案应该是:
<input type="text" [(ngModel)]="mymodel" (input)="valuechange($event)" />
{{mymodel}}
<input type="text" (keypress)="myMethod(myInput.value)" #myInput />
归档 .ts
myMethod(value:string){
...
...
}
对于反应式表单,您可以订阅所有字段的更改或仅订阅特定字段的更改。
获取 FormGroup 的所有更改:
this.orderForm.valueChanges.subscribe(value => {
console.dir(value);
});
获取特定字段的更改:
this.orderForm.get('orderPriority').valueChanges.subscribe(value => {
console.log(value);
});
我通过使用以下代码在Angular 11中解决了这个问题:
<input type="number" min="0" max="50" [value]="input.to" name="to"
(input)="input.to=$event.target.value; experienceToAndFrom()">
而 experienceToAndFrom()
是我的组件中的一个方法。
附注:我尝试了以上所有解决方案,但都没有起作用。
在我的情况下,解决方案是:
[ngModel]="X?.Y" (ngModelChange)="X.Y=$event"