我正在尝试创建一个文本编辑器,并使用可编辑的div创建了一个自定义元素。
在某些情况下,我将不得不为div的内容设置一些初始值,并在某些情况下捕获div中的类型化数据。
但是根据设置的初始值,我在同一个div上得到了三种不同的行为。
我希望div的行为类似于常规输入字段,但我不想使用实际的Input元素。
我在Stackblitz demo中给出了该问题的有效示例。
组件代码如下。
元素组件的模板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;
}
三种不同的行为是:
我期望第3种行为,例如在您清除元素的行为方式之后。
答案 0 :(得分:1)
可能的解释:您尚未声明绑定值。
解决方法: 添加:
[textContent]="model"
声明模板div
model;
ngOnInit(){
this.model = this.value;
}
在ElementComponent
出口舱内
相关: How to use [(ngModel)] on div's contenteditable in angular2?, https://github.com/KostyaTretyak/ng-stack/tree/master/projects/contenteditable