Hocam konu benim boyumu aştı. Konuyu yukarı taşımak için son yorumumu atıp buralardan ayrılıyorum
Sonunda çözdüm. Hocam sizi de etiketledim belki bir gün işine yarar.
İnput bu şekilde yazılıyor
<input type="text" #firstInput name="email"(keyup.enter)="onEnter(firstInput.value)" (click)="updateCaretPosition()"
[(ngModel)]="displayText" placeholder="ID yazın" autocomplete="off" />
İnputta her tıklama olduğunda updateCaretPosition() fonksiyonu çalışıyor. Kursor pozisyonunu belirlemek için.
Component'te çalışacak kodlar.
@ViewChild('firstInput') private firstInput: ElementRef;
displayText: string = '';
ngOnInit() {
this.caretPosition$.subscribe((caretPosition: number) => {
this.caretPosition = caretPosition;
setTimeout(() => {
SalesConsoleComponent.setSelectionRange(this.displayText, caretPosition, caretPosition);
}, 0);
});
}
private static setSelectionRange(input: any, start: number, end: number): void {
if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(start, end);
} else if (input.createTextRange) {
const range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', end);
range.moveStart('character', start);
range.select();
}
}
public updateCaretPosition(): void {
this.setCaretPosition(this.firstInput.nativeElement.selectionStart);
}
public caretPosition$: ReplaySubject<number> = new ReplaySubject(1);
private caretPosition: number;
public setCaretPosition(position: number) {
this.caretPosition$.next(position);
}