I want to use a directive to transform all input data to uppercase. To achieve that, I create this custom directive :
@Directive({
selector: \'[appToUpperC
I developed a solution in Angular 7 for uppercase and lowercase, based in some posts i've read. But i tested only for reactive forms. This solution resolve the problem of the last word and the position of the cursor.
// user.component.html
// user.component.ts
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[uppercase]',
host: {
'(input)': '$event'
}
})
export class UppercaseInputDirective {
lastValue: string;
constructor(public ref: ElementRef) { }
@HostListener('input', ['$event']) onInput($event)
{
var start = $event.target.selectionStart;
var end = $event.target.selectionEnd;
$event.target.value = $event.target.value.toUpperCase();
$event.target.setSelectionRange(start, end);
$event.preventDefault();
if (!this.lastValue || (this.lastValue && $event.target.value.length > 0 && this.lastValue !== $event.target.value)) {
this.lastValue = this.ref.nativeElement.value = $event.target.value;
// Propagation
const evt = document.createEvent('HTMLEvents');
evt.initEvent('input', false, true);
event.target.dispatchEvent(evt);
}
}
}
I posted here in stackblitz