Немного покопавшись, я разобрался, как это сделать.Я запишу это здесь на случай, если это поможет кому-то в будущем избежать процесса открытия, через которое я прошел.
В исходном документе у меня есть элемент ckeditor , подобный этому:
<div *ngIf="document">
<ckeditor #ckEditor
[editor]="Editor" [config]="ckconfig" [disabled]="true"
[(ngModel)]="document.text"></ckeditor>
<button mat-flat-button (click)="clickPasteSelectedPlain(ckEditor)">Paste Selected Text Plain</button>
</div>
В компоненте функция, вызываемая для события click , имеет виднапример:
@Output() paste = new EventEmitter<PasteEvent>();
...
clickPasteSelectedPlain(editorComponent: CKEditorComponent) {
const editor = editorComponent.editorInstance;
this.paste.emit({
content: editor.model.getSelectedContent(editor.model.document.selection),
obj: this.document,
quote: false
});
}
PasteEvent определяется как экспортируемый интерфейс , который я здесь опущу для экономии места.Клавиша content будет ссылаться на DocumentFragment .
Обратите внимание, что я передаю CKEditorComponent как параметр.Вы также можете получить к нему доступ через объявление Angular @ ViewChild , но учтите, что мой ckeditor находится внутри структуры * ngIf .Я думаю, что это хорошо работает в Angular 6, но в прошлом у меня были трудности с ссылками @ ViewChild , когда цель была условно в DOM.Этот метод всегда работает, но используйте тот метод, который вам нужен.
Событие, генерируемое emit , обрабатывается с помощью метода, который выглядит следующим образом:
doPaste(pasteEvent: PasteEvent, editorComponent: CKEditorComponent) {
const editor = editorComponent.editorInstance;
editor.model.insertContent(pasteEvent.content);
}
Посколькусодержимое DocumentFragment операция вставки будет включать все атрибуты форматирования и текста, содержащиеся в выбранном источникеНо это все, что нужно.