Я пытаюсь использовать Monaco Editor в приложении, которое я сейчас разрабатываю, и мне нужно выделить несколько строк кода, отображаемых в редакторе. В настоящее время я использую угловой компонент ngx-monaco-editor (www.npmjs.com/package/ngx-monaco-editor) для этого.
Я видел на детской площадке в Монако способ сделать то, что я хочу, используя следующее: (https://microsoft.github.io/monaco-editor/playground.html#interacting-with-the-editor-rendering-glyphs-in-the-margin)
var decorations = editor.deltaDecorations([], [
{
range: new monaco.Range(3,1,3,1),
options: {
isWholeLine: true,
className: 'myContentClass',
glyphMarginClassName: 'myGlyphMarginClass'
}
}
]);
Используя угловой компонент, я могу получить доступ к объекту editor
с помощью генератора событий onInit
. Я также сравнил объект из компонента и на игровой площадке, и они имеют одинаковые свойства, поэтому я предположил, что они были одинаковыми.
Чтобы проверить его вне большого приложения, я запустил небольшой угловой проект, следуя документации ngx-monaco-editor, чтобы получить соответствующий код для сравнения.
Однако на игровой площадке линия правильно выделена, а ее нет в моем приложении.
Я посмотрел на проблемы с угловым компонентом и ничего подобного не увидел. Более того, он говорит, что поддерживает все функции, предоставляемые Монако. Я проверил, что я использую одну и ту же версию для угловых и монако, и они одинаковы.
Я попытался воспроизвести пример игровой площадки, используя угловой компонент:
app.component.html
<ngx-monaco-editor [options]="editorOptions" [(ngModel)]="code" (onInit)="onInit($event)"></ngx-monaco-editor>
app.component.ts
editorOptions = {
theme: 'vs',
language: 'javascript',
glyphMargin: true
};
code = [
'"use strict";',
'function Person(age) {',
' if (age) {',
' this.age = age;',
' }',
'}',
'Person.prototype.getAge = function () {',
' return this.age;',
'};'
].join('\n');
onInit(editor: any) {
const t = editor.deltaDecorations([], [
{
range: new monaco.Range(3, 1, 3, 1),
options: {
isWholeLine: true,
className: 'myContentClass',
glyphMarginClassName: 'myGlyphMarginClass'
}
}
]);
console.log(t);
}
app.component.css
.myGlyphMarginClass {
background: red;
}
.myContentClass {
background: lightblue;
}
Я проверил с помощью журналов, что украшения правильно инициализированы и созданы, но они одинаковы для детской площадки и консоли.