由于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.
希望这对我遇到的问题有帮助的解释。 如果您需要更多信息,我们将很乐意提供。
您能给我发送到一个可重现此问题的存储库的链接,还是附加一个我可以解压缩以演示此问题的.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中用于导入BarModule
。 app.component.html中的语言服务无法识别该模块中声明的组件
@mjamin您有任何解决办法吗?
我也有这个问题。 每当将共享模块导入到每个组件中时,似乎也会发生这种情况。 该服务似乎忽略了由重新导出的导入模块提供的定义。 我制作了一个共享模块,可以重新导出它导入并声明的项目(包括CommonModule,一个有问题的模块),当我将该模块导入其他模块时,Angular(4)可以理解导入,但是Angular Language Service无法找到CommonModule或我的自定义组件,即使它们已在我的共享模块中导出。
@chuckjaz @mjamin我对问题进行了不同的复制,我发现(我认为)与描述更加接近(我认为)与https://github.com/Nerketur/shared-ng-module-test相匹配
它似乎与编译器选项没有任何关系,因为整个项目使用默认的所有内容。
当您说ALS无法找到CommonModule /您的自定义组件时,是否表示当您尝试使用CommonModule /自定义组件时,ALS自动完成功能不起作用?
自动完成不起作用,并且出现红色错误行并显示以下错误:
“ [角度]
“应用程序测试”不是已知元素:
(使用我刚刚提供的仓库)
我正在将该项目转换为使用新的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的自定义逻辑,并在过程中错过了路径映射。
今天发布的新扩展不再是这种情况。
由于原始版本已存在两年以上,因此我想关闭它。
如果新扩展名中仍然存在类似行为,请提出新问题。
非常感谢你!
最有用的评论
我认为语言服务没有正确地应用tsconfig编译器选项。 我在那里有一个路径映射,并且无法识别使用该映射导入的模块,这对我造成了此处所述的相同问题。
@chuckjaz :我在这里转载了这个问题: https :
tsconfig.json定义了路径映射,该路径映射在app.module.ts中用于导入
BarModule
。 app.component.html中的语言服务无法识别该模块中声明的组件