Monaco-editor 如何根据输入内容 动态更换提示内容

需要在自定义语言上增加智能提示。
因为使用的是 react-monaco-editor
所以代码这么写

editorDidMount = (editor, monaco) => {
    editor.onDidChangeModelContent(this.changeModelContent);
 
    this.editor = editor;
    this.monaco = monaco;
    // 注册自定义语言
    monaco.languages.register({ id: 'mylan' });
 
    // 为该语言注册一个语言提示器--联想
    monaco.languages.registerCompletionItemProvider(this.language, {
      provideCompletionItems: () => {
      // this.suggestions 根据输入内容的不同发生变化
        return { suggestions: this.suggestions };
      },
    });
}

changeModelContent = e => {
    console.log('内容改变', this.editor.getValue());
    this.caretOffset = e.changes[0].rangeOffset; //获取光标位置
    this.fetchSuggestions();
};
    // 获取提示项
  fetchSuggestions = () => {
    const currentText = this.editor.getValue();
    let str = currentText.substr(0, this.caretOffset + 1);
    let reg = /薪资.$/;
    if (reg.test(str)) {
      this.suggestions = [{
    label: '一月工资',
    insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
    kind: monaco.languages.CompletionItemKind.Function, 
    insertText: '一月工资', 
    detail: '一月工资',
  }];
    } else {
      this.suggestions = [
      {
    label: 'sum',
    kind: monaco.languages.CompletionItemKind.Function,
    insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
    insertText: 'sum(${1:})',
    detail: '计算所有参数数值的和',
  }];
    }
    this.editor.trigger('提示', 'editor.action.triggerSuggest', {});
  };

预想的是在输入 薪资后 输入一个点 . 可以智能提示出 「一月工资」。但是目前提示的是 No Suggestions。也就是说 suggestion 没有起作用。
这是什么原因 ?

"monaco-editor": "^0.19.2",
"react-monaco-editor": "latest"

阅读 8.2k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题