有keepalive的两个页面使用新版monaco导致重复的自定义提示

75 阅读1分钟

这个问题可能是由于页面中有多个Monaco编辑器实例,每个实例都会触发自定义提示,导致重复出现。解决方法可以尝试以下两种:

  1. 在页面加载时,只初始化一个Monaco编辑器实例,其他编辑器实例可以在需要时动态创建和销毁。
  2. 在Monaco编辑器实例化时,可以设置一个唯一的标识符,然后在自定义提示回调中进行判断,只对当前编辑器实例进行处理,避免多个编辑器实例触发重复提示。例如:
const editor = monaco.editor.create(document.getElementById('editor'),
 { value: '', language: 'javascript' }); monaco.languages.registerCompletionItemProvider('javascript',
 { provideCompletionItems: (model, position) =>
 { 
if (model.uri.toString() === editor.getModel().uri.toString()) {
 // 只对当前编辑器实例进行处理 
return [ 
{ label: 'foo', kind: monaco.languages.CompletionItemKind.Function, insertText: 'foo()' } ]; }
 }
 });

需要注意的是,在新版的Monaco中,使用 getAssociatedResource() 方法获取资源的方式已经被废弃,需要使用 uri 属性来获取资源的标识符。