1 - Вы не можете использовать каналы на входы. Для достижения такого рода вещи вы могли бы использовать (keyup)
событие:
<input
type="text"
class="col-lg-7 small rounded form-control"
formControlName="firstName"
(keyup)="upperValue($event.target.value)">
Компонент:
upperValue(value: string) {
this.formGroup.patchValue({
firstName: value.toUpperCase()
});
}
STACKBLITZ DEMO
2 - Если вы хотите, чтобы показать оригинальный текст для пользователя и изменить его «за кулисами», вы можете создать директиву:
@Directive({
selector: '[appUppercase]'
})
export class UppercaseDirective implements OnInit {
private readonly destroySubject$ = new Subject<void>();
constructor(
private readonly ngControl: NgControl
) { }
ngOnDestroy(): void {
this.destroySubject$.next();
this.destroySubject$.complete();
}
ngOnInit(): void {
this.ngControl.control.valueChanges.pipe(
takeUntil(this.destroySubject$)
).subscribe(value => {
const newValue = value.toUpperCase();
this.ngControl.control.setValue(newValue, {
emitEvent: false,
emitModelToViewChange: false,
emitViewToModelChange: false
});
});
}
}
STACKBLITZ DEMO
3 - Если вы хотите, чтобы отобразить модифицированный текст для пользователя и поддерживать его в нижнем регистре formControl
, изменить следующие директивы в директиве:
...
this.elementRef.nativeElement.value = value.toUpperCase();
this.ngControl.control.setValue(value.toLowerCase(), {
emitEvent: false,
emitModelToViewChange: false,
emitViewToModelChange: false
});
...
STACKBLITZ DEMO
Но что, если я хочу использовать заглавные буквы только на уровне представления? Таким образом, formControlvalue будет как пользователь набрал .. без какого-либо форматирования –
@johnSmith проверить обновление. – developer033
developer033 Спасибо !!!!! ты лучший! –