Error: Template parse errors: 'mat-card' is not a known element:

Error: Template parse errors: 'mat-card' is not a known element:

大约两个月前,我开始了一个 Angular 4 Material 项目,当时安装了所有当前的 npm,并且我使用了 material.angular.io 中的大部分组件。从那时起 Angular 5.0.0 就推出了。我在新的更新上按项目重建,控制台出现以下错误。

Error: Template parse errors: 'mat-card' is not a known element: 1. If 'mat-card' is an Angular component, then verify that it is part of this module. 2. If 'mat-card' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.

我已经检查了安装,并相信我拥有最新的所有内容,但之前可以运行的代码现在失败了。这是 A5 的新要求,还是 material 软件包还没有准备好?

您可以尝试从其单独的入口点(又名 @angular/material/card)导入 MatCardModule 吗?这对我有用。

如果你不提供任何代码,否则我真的帮不了你。

我最终启动了一个新应用...

npm cache clean -f
npm install -g n
ng new myAppName

然后我将我的组件一次一个地复制到组件文件夹中。对于每个副本,我 运行 ng 服务,并修复每个问题(例如将导入添加到 app.module.ts 文件等)。我只在当前好的代码需要时才安装 npm 组件。

npm install myComponent --save

在进行过程中,我发现了一些过时的 md-elements(例如 md-card)并将它们转换为它们的 mat-element 版本。有趣的是,显然在 Angular 4 中,他们同时支持相同组件的 mat 和 md 版本,但在 5 中他们似乎弃用了一些。

这是一个漫长的下午,但它帮助我清除了我尝试并放弃的所有 npm 模块,现在一切都好了。

哇!我 运行 再次陷入这个问题,并且真正深入研究了它。如果您遵循 Material Side-Nav 模块之类的某些文档,您可能会被引导在 app.module.ts 中拆分您的 @NgModule 声明以将导出与其余部分分开,就像这样...

@NgModule({
   exports: [
      myModule,
      anotherModule
   ],
})
export class MaterialModule {}

@NgModule({
   imports: [
      ... all the rest of your stuff]
   declarations: [
      ... all your custom Components
})
export class AppModule {}

在这种情况下,在拆分它们之后,当您稍后使用...添加更多自定义组件时...

ng g component components/myNewModule

它可能会在另一个@NgModule 部分下放置一个新的、额外的 "declarations:",从而中断对这些组件的访问,例如卡片!只需将新添加的声明向下移动到其他声明,问题就会消失。

我对此进行了两次测试,如果您收到错误:模板解析错误:'mat-card' 不是上面的已知元素,它似乎可以解决问题。

在Angular 6

app.module.ts:

import { MatCardModule } from '@angular/material';
...
@NgModule({
    declarations: [
    AppComponent,...
],
imports: [
...
MatCardModule,
....
]
...

})

html:

<mat-card>
    <p>
    it works!
    </p>
</mat-card>