一般遇到 input 提交内容都会逐个给里面的值去除空格,这是一个重复的劳动力,在 Angular 中可以通过自定义一个指令来解决。
考虑到项目中会有多个组件用到,所以一般会将该指令放到 shared 模块下面,下面简单写下步骤。
ng g d shared/directives/input-trim
import { InputTrimDirective } from './directives/input-trim.directive';
@NgModule({
declarations: [..., InputTrimDirective],
...
exports: [
...
InputTrimDirective
],
...
})
import { Directive, HostListener } from '@angular/core';
import { NgControl } from '@angular/forms';
@Directive({
selector: '[appInputTrim]'
})
export class InputTrimDirective {
constructor(private control: NgControl) { }
@HostListener('blur', ['$event', '$event.target'])
@HostListener('keydown.enter', ['$event', '$event.target'])
keyupFun(evt, target) {
if (target.value) {
this.control.control.setValue(this.ltrim(target.value));
}
}
ltrim(str) {
return str.replace(/(^\s*)|(\s*$)/g, '');
}
}
@NgModule({
...
imports: [
SharedModule,
...
]
...
})
<input type="text" [(ngModel)]="inputValue" placeholder="请输入内容!" appInputTrim>
测试输入内容后回车或者点击按钮都会自动去除空格了。至此,一个简单的 Angular 指令就写完了