Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@ng-util/monaco-editor

ng-util10.9kMIT20.0.1TypeScript support: included

Monaco Code Editor for Angular

angular, util, Angular utilities, monaco-editor, monaco, angular standalone library

readme

@ng-util/monaco-editor

Monaco Code Editor for Angular.

Inspired by ngx-monaco-editor.

NPM version Build Status codecov Dependency Status prettier GitHub license

Demo

Usage

Installation

Install from npm repository:

npm install @ng-util/monaco-editor --save

Configure monaco-editor library

Currently this library only supports load monaco-editor with AMD mode. The default is to use cdn (https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min) lazy loading。

If you are using local monaco editor library, you could add the following:

"assets": [
  {
    "glob": "**/*",
    "input": "node_modules/monaco-editor/min/vs",
    "output": "/lib/vs"
  }
],

And configure baseUrl via NuMonacoEditorModule.forRoot.

NuMonacoEditorModule.forRoot({
  baseUrl: `lib`,
}),

Sample

Include NuMonacoEditorModule in Main Module and Feature Modules where you want to use the editor component.(eg: app.module.ts):

import { NgModule } from '@angular/core';
import { NuMonacoEditorModule } from '@ng-util/monaco-editor';

@NgModule({
  imports: [
    NuMonacoEditorModule  // And use `provideNuMonacoEditorConfig` to modify the global configuration
  ],
})
export class AppModule { }

Create Editor options in component.

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `<nu-monaco-editor [(ngModel)]="value" [options]="editorOptions"></nu-monaco-editor>`,
})
export class DemoComponent {
  value: string = 'const a = 1;';
  editorOptions = { theme: 'vs-dark', language: 'typescript' };
}

Or monaco diff editor:

import { Component } from '@angular/core';
import { NuMonacoEditorDiffModel } from '@ng-util/monaco-editor';

@Component({
  selector: 'app-root',
  template: `<nu-monaco-diff-editor [options]="editorOptions" [old]="old" [new]="new"></nu-monaco-diff-editor>`,
})
export class DemoComponent {
  editorOptions = { theme: 'vs-dark', language: 'javascript' };
  old: NuMonacoEditorDiffModel = { code: `<p>1</p>` };
  new: NuMonacoEditorDiffModel = { code: `<p>2</p>` };
}

Events

Output event can be divided into different stages of feedback according to the type attribute. When you need to initializeinit, you can program the editor in one step.

import { Component } from '@angular/core';
import { NuMonacoEditorEvent } from '@ng-util/monaco-editor';

@Component({
  selector: 'app-root',
  template: `<nu-monaco-editor [(ngModel)]="value" [options]="editorOptions" (event)="showEvent($event)"></nu-monaco-editor>`,
})
export class DemoComponent {
  value: string = 'const a = 1;';
  editorOptions = { theme: 'vs-dark', language: 'javascript' };

  showEvent(e: NuMonacoEditorEvent): void {
    if (e.type === 'init') {
      // doing
    }
  }
}

Configurations

forRoot() method of NuMonacoEditorModule accepts config of type NuMonacoEditorConfig.

NuMonacoEditorModule.forRoot({
  baseUrl: ``, // The base URL to monaco editor library assets via AMD (RequireJS), Default: `https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min`
  defaultOptions: {}, // Default options when creating editors
  monacoLoad: (m) => {} // The event after the first loading of the monaco editor library is completed, use this function to extend monaco editor functionalities.
}),

Configure JSON Defaults

monacoLoad property of NuMonacoEditorConfig can be used to configure JSON default.

NuMonacoEditorModule.forRoot({
  defaultOptions: { scrollBeyondLastLine: false },
  monacoLoad: () => {
    const uri = monaco.Uri.parse('a://b/foo.json');
    monaco.languages.json.jsonDefaults.setDiagnosticsOptions({
      validate: true,
      schemas: [
        {
          uri: 'http://myserver/foo-schema.json',
          fileMatch: [uri.toString()],
          schema: {
            type: 'object',
            properties: {
              p1: {
                enum: ['v1', 'v2'],
              },
              p2: {
                $ref: 'http://myserver/bar-schema.json',
              },
            },
          },
        },
        {
          uri: 'http://myserver/bar-schema.json',
          fileMatch: [uri.toString()],
          schema: {
            type: 'object',
            properties: {
              q1: {
                enum: ['x1', 'x2'],
              },
            },
          },
        },
      ],
    });
  },
}),

Now pass model config of type NuMonacoEditorModule to Editor Component.

import { Component } from '@angular/core';
import { NuMonacoEditorEvent, NuMonacoEditorModel } from '@ng-util/monaco-editor';

@Component({
  selector: 'app-demo',
  template: `
  <nu-monaco-editor #a [(ngModel)]="value" [model]="model" (event)="showEvent($event)"></nu-monaco-editor>
  <button (click)="a.editor.getAction('editor.action.formatDocument').run()">Format document</button>
  `,
})
export class DemoComponent {
  value = '{"p1":"a"}';
  model: NuMonacoEditorModel;

  showEvent(e: NuMonacoEditorEvent) {
    if (e.type === 'init') {
      this.model = {
        language: 'json',
        uri: monaco.Uri.parse('a://b/foo.json'),
      };
    }
  }
}

API

nu-monaco-editor

Property Description Type Default
[placeholder] Placeholder of monaco editor, Can change the style via defining the .monaco-editor-placeholder CSS. string -
[height] Height of monaco editor string 200px
[disabled] Disabled of monaco editor boolean false
[autoFormat] Whether to automatically format the document boolean true
[options] Default options when creating editors monaco.editor.IStandaloneEditorConstructionOptions -
[model] Model of monaco editor NuMonacoEditorModel -
[delay] Delay init monaco editor, unit: ms number 0
(event) Event callback EventEmitter<NuMonacoEditorEvent> -

nu-monaco-diff-editor

Property Description Type Default
[height] Height of monaco editor string 200px
[disabled] Disabled of monaco editor boolean false
[options] Default options when creating editors monaco.editor.IStandaloneEditorConstructionOptions -
[old] Old model of monaco editor NuMonacoEditorDiffModel -
[new] New model of monaco editor NuMonacoEditorDiffModel -
[delay] Delay init monaco editor, unit: ms number 0
(event) Event callback EventEmitter<NuMonacoEditorEvent> -

License

The MIT License (see the LICENSE file for the full text)

changelog

20.0.1 (2025-06-24)

  • fix(monaco-editor): fix can't auto format when ngModel changed (#92) (b6c0d34), closes #92

20.0.0 (2025-06-07)

  • refactor: using signal (#90) (d431ce0), closes #90
  • fix(monaco-editor): fix missing monaco types (#84) (9c28df0), closes #84

19.0.1 (2025-01-27)

  • fix(monaco-editor): fix missing monaco types (#84) (9c28df0), closes #84

19.0.0 (2024-11-23)

  • build: bump to angular 19 (#81) (7e6412d), closes #81

18.1.0 (2024-11-02)

  • feat(monaco-editor): add placeholder (#79) (8206f10), closes #79

18.0.0 (2024-06-15)

  • build: bump angular 18 (#77) (72fa40e), closes #77

17.0.1 (2023-11-11)

17.0.0 (2023-11-09)

Bug Fixes

  • monaco-editor: correct automatic formatting (#68) (0e0b29f)

16.0.1 (2023-10-21)

Bug Fixes

  • monaco-editor: correct automatic formatting (#68) (0e0b29f)

16.0.0 (2023-06-04)

  • build: bump angular to 16

15.0.0 (2023-01-02)

  • build: bump angular to 15

14.0.1 (2022-09-29)

Bug Fixes

  • markdown: add options to preview (#60) (e7c569b)

14.0.0 (2022-06-24)

13.1.0 (2022-06-03)

Features

  • monaco-editor: add autoFormat property (#53) (3876252)

13.0.0 (2021-12-28)

12.1.2 (2021-12-20)

Bug Fixes

12.1.1 (2021-08-02)

Bug Fixes

  • should be close ivy of npm package (#43) (9d15111)

12.1.0 (2021-08-02)

Bug Fixes

Features

  • module:lazy: allow to specify resource type (#32) (86c6cb5)
  • module:monaco: add monacoPreLoad Config (#40) (ab2396b)

12.0.0 (2021-05-27)

Bug Fixes

Features

  • module:lazy: allow to specify resource type (#32) (86c6cb5)

11.2.0 (2021-03-01)

Bug Fixes

Features

  • module:lazy: allow to specify resource type (#32) (86c6cb5)

11.1.1 (2020-12-25)

Bug Fixes

11.1.0 (2020-11-13)

Features

  • module:markdown: add nu-markdown-preview component (#26) (6affc7a)

11.0.0 (2020-11-13)

Just bump angular version from 10 to 11.

10.2.2 (2020-07-21)

10.2.0 (2020-07-13)

Bug Fixes

  • module:markdown: fix unable to load again (#18) (e898683)

Features

  • module:lazy: use monitor instead change (#19) (bbf1135)

10.1.1 (2020-07-11)

Bug Fixes

  • module:markdown: fix missing dependencies (#15) (a0b3bf0)

10.1.0 (2020-07-11)

Features

10.0.0 (2020-06-28)

  • Just flash a version number

9.2.0 (2020-06-11)

Features

  • monaco-editor: add delay property (#8) (8857396)
  • add util libary (#9) (b1a6772)
  • monaco-editor: add monaco-editor libary (#6) (7bae472)

9.1.0 (2020-05-12)

Features

  • monaco-editor: add monaco-editor libary (#6) (7bae472)

9.0.0 (2020-05-10)