Angular - 如何在文本区域中设置插入符位置
Angular - How to set caret position in textarea
我认为这很容易做到,但我意识到我不知道该怎么做。我有一个带有文本区域的对话框,可以在其中编辑多行文本。这个想法是,当您打开此对话框并且已经有一些文本时,将插入符号设置为文本开头。所以我想应该是位置 0
首先我尝试在HTML中设置它,但它不起作用
<textarea
matInput
#textArea
id="editExperimentTitleInput"
[placeholder]="'experiment.title.placeholder' | translate"
[(ngModel)]="title"
autocomplete="off"
spellcheck="false"
[selectionStart]="0"
[selectionEnd]="0"
rows="10"
></textarea>
这也不行
@ViewChild('textArea') _textArea: ElementRef;
ngAfterViewInit(): void {
const textArea = this._textArea.nativeElement as HTMLTextAreaElement;
textArea.setSelectionRange(0, 0);
//textArea.focus() // Throws expresion changed after....
}
我错过了什么?
Angular 中的重点元素往往是一件很难实施的事情。虽然,看起来您的代码在使用 FormControl 而不是 ngModel 时有效(working stackblitz):
模板:
<textarea #textArea [formControl]="formControl"></textarea>
组件:
@ViewChild('textArea') _textArea: ElementRef;
formControl = new FormControl(this.title);
ngAfterViewInit(): void {
const textArea = this._textArea.nativeElement as HTMLTextAreaElement;
textArea.focus()
textArea.setSelectionRange(0, 0);
}
Module(如果 ReactiveFormsModule 不存在则添加到导入):
@NgModule({
imports: [ BrowserModule, FormsModule, ReactiveFormsModule ]
})
你肯定需要 focus()
因为 setSelectionRange
只设置光标,没有焦点就没有多大用处。
我认为这很容易做到,但我意识到我不知道该怎么做。我有一个带有文本区域的对话框,可以在其中编辑多行文本。这个想法是,当您打开此对话框并且已经有一些文本时,将插入符号设置为文本开头。所以我想应该是位置 0
首先我尝试在HTML中设置它,但它不起作用
<textarea
matInput
#textArea
id="editExperimentTitleInput"
[placeholder]="'experiment.title.placeholder' | translate"
[(ngModel)]="title"
autocomplete="off"
spellcheck="false"
[selectionStart]="0"
[selectionEnd]="0"
rows="10"
></textarea>
这也不行
@ViewChild('textArea') _textArea: ElementRef;
ngAfterViewInit(): void {
const textArea = this._textArea.nativeElement as HTMLTextAreaElement;
textArea.setSelectionRange(0, 0);
//textArea.focus() // Throws expresion changed after....
}
我错过了什么?
Angular 中的重点元素往往是一件很难实施的事情。虽然,看起来您的代码在使用 FormControl 而不是 ngModel 时有效(working stackblitz):
模板:
<textarea #textArea [formControl]="formControl"></textarea>
组件:
@ViewChild('textArea') _textArea: ElementRef;
formControl = new FormControl(this.title);
ngAfterViewInit(): void {
const textArea = this._textArea.nativeElement as HTMLTextAreaElement;
textArea.focus()
textArea.setSelectionRange(0, 0);
}
Module(如果 ReactiveFormsModule 不存在则添加到导入):
@NgModule({
imports: [ BrowserModule, FormsModule, ReactiveFormsModule ]
})
你肯定需要 focus()
因为 setSelectionRange
只设置光标,没有焦点就没有多大用处。