ReferenceError: монако не определено

Я пытаюсь использовать редактор Microsoft Monaco с угловым 2. Мой компонент

declare const monaco: any;
declare const require: any;

export class MonacoEditorComponent implements AfterViewInit {
   ngAfterViewInit() {

        let onGotAmdLoader = () => {
            // Load monaco
            (<any>window).require(["vs/editor/editor.main"], () => {

                this.initMonaco();
            });
        };

        // Load AMD loader if necessary
        if (!(<any>window).require) {
            let loaderScript = document.createElement("script");
            loaderScript.type = "text/javascript";
            loaderScript.src = "vs/loader.js";
            loaderScript.addEventListener("load", onGotAmdLoader);
            document.body.appendChild(loaderScript);
        } else {
            onGotAmdLoader();
        }
    }

    initMonaco() {
        let myDiv: HTMLDivElement = this.editorContent.nativeElement;
        let options = this.options;
        options.value = this._value;
        options.language = this.language;
        this._editor = monaco.editor.create(myDiv, options);
   }
}

Итак, в основном, я пытаюсь сначала загрузить monaco, проверив условие if в window.require, после загрузки основного файла editor.main monaco я пытаюсь создать редактор, используя monaco.editor.create(). Но даже после загрузки editor.main.js он не может разрешить ошибку monaco. Я попытался отладить и увидеть значение monaco в функции initMonaco, оно отображается как недоступное. Я делаю что-то неправильно?

Примечание: vs уже разрешен к monaco-editor/min/vs, и он также может загрузить файл js в браузер. Кроме того, все используемые переменные, такие как параметры и _value, объявлены в компоненте (я удалил их отсюда).


person Sri    schedule 06.03.2017    source источник
comment
Где вы его инициализировали monaco?   -  person RIYAJ KHAN    schedule 06.03.2017
comment
monaco должен быть разрешен файлом monaco editor.main.js, верно?   -  person Sri    schedule 06.03.2017
comment
Нет. Вы должны предоставить ссылку на него в контексте, в котором вы собираетесь его потреблять.   -  person RIYAJ KHAN    schedule 06.03.2017
comment
Можете ли вы быть более конкретным, где и как мне нужно инициализировать monaco? Для справки см. github.com/Microsoft/monaco-editor, инициализация отсутствует.   -  person Sri    schedule 06.03.2017
comment
добавить необходимую конфигурацию с указанием местоположения файла... ngAfterViewInit() { var onGotAmdLoader = () =› { // Загрузить monaco (‹any›window).require.config({ paths: { 'vs': 'node_modules/monaco- редактор/мин/против' } }); (‹любое›окно).require(['vs/editor/editor.main'], () =› { this.initMonaco(); }); };   -  person Andy Danger Gagne    schedule 02.06.2017
comment
вы взяли этот фрагмент отсюда? github.com/Microsoft/monaco-editor/issues/ Я сделал некоторые небольшие изменения в этом, и я запустил свой...   -  person Andy Danger Gagne    schedule 02.06.2017
comment
Спасибо @AndyDangerGagne, на самом деле мне удалось решить проблему. На самом деле проблема в том, что monaco будет загружаться только с помощью собственного загрузчика, мы используем загрузчик systemjs в нашем проекте. Когда мы попробовали загрузчик, предоставленный monaco loader, он работал нормально.   -  person Sri    schedule 03.06.2017


Ответы (1)


Если кто-то еще ищет это, я смог решить проблему. На самом деле проблема в том, что monaco будет загружаться только с помощью собственного загрузчика, мы используем загрузчик systemjs в нашем проекте. Когда мы попробовали загрузчик, предоставленный monaco loader, он работал нормально. Разница в том, что загрузчик monaco добавляет в загрузчик некоторые дополнительные функции, такие как конфигурация, которые недоступны в загрузчике systemjs.

person Sri    schedule 07.06.2017