diff --git a/packages/common/component/LifeCycles.vue b/packages/common/component/LifeCycles.vue index 967efa02bc..7965f950fe 100644 --- a/packages/common/component/LifeCycles.vue +++ b/packages/common/component/LifeCycles.vue @@ -125,7 +125,8 @@ export default { bindLifeCycles: {}, editorValue: '{}', hasError: false, - linterWorker: null + linterWorker: null, + completionProvider: null }) watchEffect(() => { @@ -210,7 +211,7 @@ export default { return } // Lowcode API 提示 - initCompletion(editorRef.value.getMonaco()) + state.completionProvider = initCompletion(editorRef.value.getMonaco(), editorRef.value.getEditor()?.getModel()) // 初始化 ESLint worker state.linterWorker = initLinter(editor, editorRef.value.getMonaco(), state) @@ -226,6 +227,9 @@ export default { } onBeforeUnmount(() => { + state.completionProvider.forEach((provider) => { + provider.dispose() + }) // 终止 ESLint worker state.linterWorker?.terminate?.() }) diff --git a/packages/common/js/completion.js b/packages/common/js/completion.js index c51858cacc..3705232a9b 100644 --- a/packages/common/js/completion.js +++ b/packages/common/js/completion.js @@ -157,7 +157,7 @@ const getWords = (model, position) => { const lastWord = model.getWordUntilPosition(lastPosition).word ? model.getWordUntilPosition(lastPosition) : getCurrentChar(model, lastPosition) - if (!/[\w\.]/.test(lastWord.word)) break + if (!/[\w.]/.test(lastWord.word)) break words.push(lastWord) lastPosition.column = lastWord.startColumn } @@ -172,9 +172,14 @@ const getRange = (position, words) => ({ endColumn: words[words.length - 1].endColumn }) -export const initCompletion = (monacoInstance) => { +export const initCompletion = (monacoInstance, editorModel, conditionFn) => { const completionItemProvider = { provideCompletionItems(model, position, _context, _token) { + if (editorModel && model.id !== editorModel.id) { + return { + suggestions: [] + } + } const words = getWords(model, position) const wordContent = words.map((item) => item.word).join('') const range = getRange(position, words) @@ -185,9 +190,10 @@ export const initCompletion = (monacoInstance) => { const snippetSuggestions = getSnippetsSuggestions(monacoInstance, range, wordContent) // 用户变量数据提示 e.g. this.dataSourceMap.xxx.load() const userSuggestions = getUserSuggestions(monacoInstance, range, wordContent) - return { - suggestions: [...apiSuggestions, ...snippetSuggestions, ...userSuggestions] + suggestions: [...apiSuggestions, ...snippetSuggestions, ...userSuggestions].filter((item) => + conditionFn ? conditionFn(item) : true + ) } }, triggerCharacters: ['.'] diff --git a/packages/plugins/data/src/CreateVariable.vue b/packages/plugins/data/src/CreateVariable.vue index c91597f473..b04b59cf24 100644 --- a/packages/plugins/data/src/CreateVariable.vue +++ b/packages/plugins/data/src/CreateVariable.vue @@ -46,6 +46,11 @@
  • 示例2: function fnName() {}
  • 示例3: { getValue: () => {} }
  • +
    +
    + 注意:使用JS表达式定义state变量的时候无法调用state其他变量定义,
    另由于JS函数定义在变量之后,也无法调用JS面板定义的函数 +
    +