我在项目中使用monaco编辑器来帮助用户指定一些模板。
require.config({ paths: { 'vs': 'https://unpkg.com/monaco-editor@0.10.1/min/vs' }});
window.MonacoEnvironment = { getWorkerUrl: () => proxy };
let proxy = URL.createObjectURL(new Blob([`
self.MonacoEnvironment = {
baseUrl: 'https://unpkg.com/monaco-editor@0.10.1/min/'
};
importScripts('https://unpkg.com/monaco-editor@0.10.1/min/vs/base/worker/workerMain.js');
`], { type: 'text/javascript' }));
require(["vs/editor/editor.main"], function () {
let editor = monaco.editor.create(document.getElementById('container'), {
value: '',
language: 'javascript',
});
monaco.languages.typescript.javascriptDefaults
.addExtraLib(`var myobject = {
field1: "",
field2: ""
}`, 'filename/fields.d.ts')
});
html, body, #container {
width: 100%;
height: 100%;
}
<script src="https://unpkg.com/monaco-editor@0.10.0/min/vs/loader.js"></script>
<div id="container"></div>
例如
{{ myobject.field1 }}
当他们输入时,我想知道他们被允许输入的内容,并且能够理想地将其指定为json对象。
例如,我像这样描述了myobject
myobject = {
field1: '',
field2: ''
}
并为他们键入myobject的第一个智能感知
然后当它们向下移动时,它们也会在田地中得到它(如果树更深,则也是如此)
上面的示例显示了如何通过在monaco.languages.typescript.javascriptDefaults上添加addExtraLib函数来实现它。如果将monaco设置为语言“javascript”,这种方法很有效。
但是,如果我将语言更改为“把手”,则没有longers提供intellisense(预期),并且monaco.languages.html.handlebarsDefaults上没有addExtraLib。
将intellisense指定为一组json(或类似)的最佳方法是什么?
注意:我知道你可以注册一个完成项目提供者 - 但我只能提供单个项目 - 而不是复杂的对象树(不是这个折扣这个方法 - 我也有兴趣如何做复杂的嵌套完成)