Хорошо, с некоторыми подсказками из Интернета я нашел решение:
Это файл TypeScript, конфигурация для редактора:
tinyMceConfig: any;
ngOnInit() {
// this.loadData();
this.configureTinyMce();
}
configureTinyMce() {
const that = this;
this.tinyMceConfig = {
menubar: false,
branding: false,
height: 300,
base_url: '/tinymce',
suffix: '.min',
inline: false,
toolbar: 'filterbutton',
setup: function (editor) {
const test = that.filter.map(f => { return {
type: 'nestedmenuitem',
text: f.templateVariableName,
icon: 'template',
getSubmenuItems: function() {
return f.fieldNames.map( field => { return {
type: 'menuitem',
text: field.memberName,
icon: 'paste-text',
onAction: function () {
editor.insertContent('{{' + f.templateVariableName + '.' + field.memberName + '}}');
}
}; });
}
}; });
/* example, adding a toolbar menu button */
editor.ui.registry.addMenuButton('filterbutton', {
text: 'Filter',
fetch: function (callback) {
callback(test);
}
});
}
};
}
С
const test
Я использую и преобразую объект извне функции в соответствующий синтаксис для пункта меню TinyMCE. В файле шаблона HTML это выглядит так:
<editor
formControlName="desktophtml"
required
name="desktophtml"
[init]="tinyMceConfig">
</editor>
Объект (с именем 'filter'), который я использую для подачи в редактор, выглядит примерно так:
{
templateVariableName: 'foo',
fieldNames: [ {
memberName: 'bar'
}]
}
Надеюсь, это сэкономит кому-то много времени;)