尝试替换输入的特殊字符,我最终编写了这个简单的指令:
标准化输入.directive.ts
@Directive({
selector: "[appNormalizedInput]"
})
export class NormalizedInputDirective {
constructor(private element: ElementRef) {}
@HostListener("keypress", ["$event"]) replaceAWithB(event): void {
const initalValue: string = this.element.nativeElement.value;
this.element.nativeElement.value = initalValue.replace("a", "b");
}
}
这将替换a
为b
on keypress。这是我的示例(StackBlitz):
app.component.html
<input type="text" (input)="onInput($event)" [(ngModel)]="model" (ngModelChange)="onModelChange()" appNormalizedInput/>
<br/>
<label>{{model}}</label>
app.component.ts
export class AppComponent {
model = "";
onInput(event) {
console.log("on input: ", event.target.value);
}
onModelChange() {
console.log("On model change: ", this.model);
}
}
一旦我输入a
,我希望b
在控制台输出中,对于model
(标签内容)也是如此,但我会a
一直到按下下一个键。问题是事件是one step behind
输入的实际 UI 值。
处理这种情况的正确HostListener 事件是什么?我应该如何更改值,以便我可以在事件中获得新的(input)
值(ngModelChange)
?