Я пытаюсь создать текстовый редактор и создал пользовательский элемент в угловых, используя редактируемый div.
В некоторых случаях мне нужно будет установить некоторое начальное значение для содержимого div и в некоторых случаях записать напечатанные данные в div.
Но я получаю три разных поведения для одного и того же div в зависимости от установленного начального значения.
Я хочу, чтобы div вел себя как обычное поле ввода, но я не хочу использовать фактический элемент Input.
Я сделал рабочий пример проблемы в демонстрационной версии Stackblitz .
Код компонентов приведен ниже.
Шаблон HTML для компонента элемента:
<div contentEditable='true' (input)="update($event)">{{value}}</div>
<p>{{value}}</p>
Файл машинописного текста для элемента компонента:
import { Component, Input } from '@angular/core';
@Component({
selector: 'element',
template: `<div contentEditable='true' (input)="update($event)">{{value}}</div>
<p>{{value}}</p>
`,
styleUrls: ['./element.component.css']
})
export class ElementComponent {
@Input() value: string;
update(event) {
this.value = event.target.innerText;
}
}
CSS:
div{
background: black;
margin: auto;
color:white;
font-size: 2em;
}
Три различных поведения:
- Если вы не установите начальное значение в поле ввода значения, как вы
введите div, текст будет добавлен к себе непрерывно.
- Если вы вводите начальное значение в поле ввода значения при вводе
в элементе div курсор сбрасывает его в исходное положение.
- Предоставляете ли вы исходный текст или вводите что-то в пустой div, если вы выделите весь текст из div и нажмете delete или backspace
и начать печатать в нем. Он ведет себя как обычное текстовое поле.
Я ожидаю третьего поведения, например, после того, как вы очистите элемент, как он ведет себя.