Vscode-ng-language-service: HTML模板中的语言服务未检测到重新导出的模块的组件

创建于 2017-04-11  ·  22评论  ·  资料来源: angular/vscode-ng-language-service

由于angular / material2-2.0.0-beta.3宣布将在下一个版本中弃用导出所有材料组件的MaterialModule ,因此我决定遵循他们的建议并创建自己的特定于应用程序AppMaterialModule ,其中仅包含我逐一使用的材料模块。

// app-material.module.ts
import { NgModule } from '@angular/core';
import {
  MdInputModule,
  etc...
} from '@angular/material'

@NgModule({
  imports: [],
  exports: [
    MdInputModule,
    etc...
  ],
  declarations: [],
  providers: [],
})
export class AppMaterialModule { }

这也是我的app.module.ts文件:

@NgModule({
  imports: [
    CoreModule,
    AppMaterialModule,
    BrowserModule,
    BrowserAnimationsModule,
    HttpModule,
    AppRoutingModule,
    SharedModule.forRoot()
  ],
  declarations: [AppComponent],
  bootstrap: [AppComponent]
})
export class AppModule { }

我测试了我的应用程序,它的工作方式与替换MaterialModule之前的工作方式相同。 但是,当我打开HTML模板文件时,我注意到在所使用的所有材料组件上均显示了错误。

它们都具有相同的错误:

[Angular]
'md-input-container' is not a known element:
1. If 'md-input-container' is an Angular component, then verify that it is part of this module.
2. If 'md-input-container' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.

ng-lang-service-bug

希望这对我遇到的问题有帮助的解释。 如果您需要更多信息,我们将很乐意提供。

最有用的评论

我认为语言服务没有正确地应用tsconfig编译器选项。 我在那里有一个路径映射,并且无法识别使用该映射导入的模块,这对我造成了此处所述的相同问题。

@chuckjaz :我在这里转载了这个问题: https :

tsconfig.json定义了路径映射,该路径映射在app.module.ts中用于导入BarModuleapp.component.html中的语言服务无法识别该模块中声明的组件

所有22条评论

您能给我发送到一个可重现此问题的存储库的链接,还是附加一个我可以解压缩以演示此问题的.zip文件?

通过遵循与@ tsvetan-ganev相同的建议(创建和应用特定的材料模块),验证我在VSCode中遇到了这个确切问题。

@chuckjaz ,这是我从plnkr下载的一个压缩项目,因为我不知道如何在此共享到实际项目的链接。 很抱歉给您带来不便,但我实际上花了20分钟来尝试共享与我的项目的链接。
ng-material.zip

@ tsvetan-ganev我无法使用提供的.zip文件重现您遇到的问题,因为它不包含完整的项目。 您可以提供一个包含有效的package.json和tsconfig.json文件的文件吗?

我确实找到了可能是相关的错误, https://github.com/angular/angular/issues/15969。 这是因为未在@angular/material旁边安装@angular/animations @angular/material

我认为语言服务没有正确地应用tsconfig编译器选项。 我在那里有一个路径映射,并且无法识别使用该映射导入的模块,这对我造成了此处所述的相同问题。

@chuckjaz :我在这里转载了这个问题: https :

tsconfig.json定义了路径映射,该路径映射在app.module.ts中用于导入BarModuleapp.component.html中的语言服务无法识别该模块中声明的组件

@mjamin您有任何解决办法吗?

我也有这个问题。 每当将共享模块导入到每个组件中时,似乎也会发生这种情况。 该服务似乎忽略了由重新导出的导入模块提供的定义。 我制作了一个共享模块,可以重新导出它导入并声明的项目(包括CommonModule,一个有问题的模块),当我将该模块导入其他模块时,Angular(4)可以理解导入,但是Angular Language Service无法找到CommonModule或我的自定义组件,即使它们已在我的共享模块中导出。

@chuckjaz @mjamin我对问题进行了不同的复制,我发现(我认为)与描述更加接近(我认为)与https://github.com/Nerketur/shared-ng-module-test相匹配

它似乎与编译器选项没有任何关系,因为整个项目使用默认的所有内容。

当您说ALS无法找到CommonModule /您的自定义组件时,是否表示当您尝试使用CommonModule /自定义组件时,ALS自动完成功能不起作用?

自动完成不起作用,并且出现红色错误行并显示以下错误:
“ [角度]
“应用程序测试”不是已知元素:

  1. 如果“ app-testing”是Angular组件,则请验证它是否属于此模块。
  2. 如果“ app-testing”是Web组件,则将“ CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“ @ NgModule.schemas”以禁止显示此消息。”

(使用我刚刚提供的仓库)

我正在将该项目转换为使用新的Typescript插件体系结构的过程中,并且在解决此bug方面进展缓慢。 对于那个很抱歉。

插件架构排序后,我将解决积压的问题。

@chuckjaz不用担心。 感谢您付出了很多努力。 它到达那里;)

有没有解决方法?

也有这个问题。 我只是想知道是否有任何更新,因为我很乐意继续使用此插件。

我认为这可以解决问题: https :

导入所有内容(包括共享模块)并将其导入到这些共享模块本身时,只需使用相对路径,即所有导入都应具有相对路径。 然后再出口将被确认。

@ tx8821起作用了,谢谢。 现在足够好了! 我很高兴能够再次使用它,这是迄今为止v4的最佳功能!

@ tx8821谢谢您的解决方案! 但这不是解决方法,只是代码中的一个拐杖。 将等待真正的修复

有相同的问题,很乐意看到相对于使用相对路径的修复方法(ugh!)。 谢谢您到目前为止的辛勤工作! :)

Ionic 4多功能应用程式(monorepo)带我来到这里。
可悲的是,Ionic需要为每个应用程序都提供一个package.json。 换句话说:我将三个项目合而为一。 2个应用程序和根目录。 每个包json都差不多。 无论如何...这是我的工作区结构(片段):

root
|- apps
|  |- app1
|  |  |- package.json
|  |  |- tsconfig.json
|  |- app2
|     |- package.json
|     |- tsconfig.json
|- lib
|  |- (export stuff like components)
|- package.json
|- tsconfig.json
|- angular.json (with all apps defined)

应用程序的tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "esnext",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es2015",
    "typeRoots": ["node_modules/@types"],
    "lib": ["es2018", "dom"],
    "paths": {
      "@lib/*": ["../../lib/*"]
    }
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true
  }
}

我可以从lib导入HelloWorldComponent。
但是在html中,我得到了错误:

'app-hello-world' is not a known element:
1. If 'app-hello-world' is an Angular component, then verify that it is part of this module.
2. If 'app-hello-world' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.Angular

Angular-Language-Service应该可以正常工作,因为在app.module.ts中声明了HelloWorldComponent。 奇怪的。 也许是因为该文件夹位于应用程序src的外部? 别名路径@lib只是一个快捷方式。 我还尝试了不直接导入组件的情况。 仍然错误。

也许这应该是一个新问题?

我们曾经实现用于发现和解析tsconfig.json的自定义逻辑,并在过程中错过了路径映射。
今天发布的新扩展不再是这种情况。
由于原始版本已存在两年以上,因此我想关闭它。
如果新扩展名中仍然存在类似行为,请提出新问题。
非常感谢你!

由于不活动,此问题已自动锁定。
如果您遇到类似或相关的问题,请提出新的问题。

阅读有关我们的自动对话锁定策略的更多信息。

_此动作已由漫游器自动执行。_

此页面是否有帮助?
0 / 5 - 0 等级