у меня есть ввод электронной почты, я хочу, чтобы когда я вводил прописные буквы ввода, он преобразует их в строчные буквы
Я пробовал этот метод, но он показывает мне ошибку
ERROR RangeError: Maximum call stack size exceeded
<input type = "text" formControlName = "mail" (ngModelChange) = "toLowerCase($event)">
private toLowerCase(event): void {
this.cmOrganizationForm.get('mail').setValue(event.toLowerCase());
}
Пожалуйста, не используйте событие ngModelChange
при использовании реактивных форм.
Прослушайте подписку valueChanges
вашего элемента управления формой и установите значение под подпиской с emitEvent
как false, это не приведет к повторной генерации события valueChanges
.
Попробуйте, это не приведет к событию emit
valueChanges снова
private ngOnInit(): {
this.cmOrganizationForm.get('mail').valueChanges.subscribe((event) => {
this.cmOrganizationForm.get('mail').setValue(event.toLowerCase(), {emitEvent: false});
})
}
нам нужно удалить эмиттер событий modelChange, который должен использоваться в шаблонной форме ngModel.
Шаблон:
<input type = "text" formControlName = "mail">
Компонент:
ngOnInit(){
this.form.get('mail').valueChanges.subscribe(event => {
this.form.get('mail').setValue(event.toLowerCase(), {emitEvent: false});
});
}
StackBlitz: https://stackblitz.com/edit/angular-wp4tim?file=src%2Fapp%2Fapp.component.ts
Вы можете достичь желаемого без события:
В вашем css добавьте
input[type = "text"] { text-transform: lowercase; }
а в файле .ts
используйте this.cmOrganizationForm.get('mail').toLowerCase();
эта функция в angular 6 для подчеркивания и нижнего регистра:
underscore(selectkpi){
this.selectedUnderKpi = selectkpi.replace(' ', '_').toLowerCase();
var a = this.selectedUnderKpi
console.info("ini = ",a);
}