Я был после этого видео: https://www.youtube.com/watch?v=0IXelrVEoWI и источник corrosponding GitHub: https://github.com/tabvn/angular-blogРеализация TinyMCE с angular2
Он отлично работает для создания нового контента, но I'am сталкивается с некоторыми проблемами при попытке загрузить и редактировать существующий контент в том же редакторе.
Мой HTML DOM элемент выглядит следующим образом:
<div class="row">
<div class="form-group col-lg-10">
<label for="description">description:</label>
<text-editor [value]="defaultBodyValue" [elementId]="'description'" (onEditorKeyup)="onBodyTextEditorKeyUp($event)"></text-editor>
</div>
</div>
В моем компоненте я называю этот метод из ngOnInit():
getDescription(): void {
let id;
this.route.params.forEach((params: Params) => {
id = +params['id'];
})
this.descService.getDesc(id).then(desc => this.desc = desc);
this.defaultBodyValue = "asd";
}
Я HARDCODED описание на "ASD" для в целях тестирования.
Мой editor.component.ts источник выглядит следующим образом:
export class EditorComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {
@Input() elementId: string;
@Input() value: any = "";
@Output() onEditorKeyup: EventEmitter<any> = new EventEmitter<any>();
baseURL: string = '/';
constructor() {
}
ngOnInit() {
}
editor;
ngAfterViewInit() {
tinymce.init({
selector: '#' + this.elementId,
plugins: ['link', 'paste', 'table', 'lists', 'hr', 'emoticons', 'advlist'],
skin_url: this.baseURL + 'assets/skins/lightgray',
setup: editor => {
this.editor = editor;
editor.on('keyup',() => {
const content = editor.getContent();
this.onEditorKeyup.emit(content);
});
},
});
}
ngOnDestroy() {
tinymce.remove(this.editor);
}
didSetValue: boolean = false;
ngOnChanges(){
console.log(this.value);
console.log("TEST: " + this.editor);
if(!isNullOrUndefined(this.editor) && this.value !== "" && !this.didSetValue){
console.log(this.value);
this.didSetValue = true;
this.editor.setContent(this.value);
}
}
}
Это прекрасно работает при создании нового контента, но когда я пытаюсь изменить содержимое, он записывает следующие на консоль:
asd
editor.component.ts:55 TEST: undefined
ОБНОВЛЕНО функция ngAfterViewInit():
ngAfterViewInit() {
tinymce.init({
selector: '#' + this.elementId,
plugins: ['link', 'paste', 'table', 'lists', 'hr', 'emoticons', 'advlist'],
skin_url: this.baseURL + 'assets/skins/lightgray',
setup: editor => {
editor = editor;
editor.on('keyup',() => {
const content = editor.getContent();
this.onEditorKeyup.emit(content);
});
},
});
}
Привет Майкл, я уже обновил метод в оригинальный вопрос. К сожалению, он не меняет результата. Его все еще не определено. Было ли изменение, что вы имели в виду? – Tony
Можете ли вы создать образец страницы в JSFiddle, чтобы мы могли видеть текущий код? Решение проблем области с 'this' из частичного кода довольно сложно. –
Я пробовал Майкла, но мне очень сложно реплицировать ... :(Прямо сейчас (вдохновленный тем, что вы говорите с помощью this.editor) Я пытаюсь использовать что-то вроде: ngOnChanges() {console .log (this.value); console.log (tinymce); if (! isNullOrUndefined (this.editor) && this.value! == "" &&! this.didSetValue) { 10 console.log (это. значение) это.didSetValue = true; //this.editor.setContent(this.value); //tinymce.get(tinymce.editors[1].id).setContent(this.value); tinymce.get (tinymce.editors); } tinymce.setContent = this.value; } – Tony