Я адаптировал ответ Isetty для работы с версией версии Angular 2.0, теперь она доступна. Помимо работы с версией выпуска, я также добавил событие keyup и использовал textContent, а не innerText, потому что это лучше подходит для моего приложения. Вы можете изменить это.
import {Directive, ElementRef, Input, Output, EventEmitter, OnChanges} from "@angular/core";
@Directive({
selector: '[contenteditableModel]',
host: {
'(blur)': 'onEdit()',
'(keyup)': 'onEdit()'
}
})
export class ContentEditableDirective implements OnChanges {
@Input('contenteditableModel') model: any;
@Output('contenteditableModelChange') update = new EventEmitter();
constructor(
private elementRef: ElementRef
) {
console.log('ContentEditableDirective.constructor');
}
ngOnChanges(changes) {
console.log('ContentEditableDirective.ngOnChanges');
console.log(changes);
if (changes.model.isFirstChange())
this.refreshView();
}
onEdit() {
console.log('ContentEditableDirective.onEdit');
var value = this.elementRef.nativeElement.innerText
this.update.emit(value)
}
private refreshView() {
console.log('ContentEditableDirective.refreshView');
this.elementRef.nativeElement.textContent = this.model
}
}
Возможный дубликат [Как использовать \ [(ngModel) \] на div, доступном для контента в угловом2?] (Http://stackoverflow.com/questions/35378087/how-to-use-ngmodel-on-divs-contenteditable -in-angular2) – tobek