'mat-card' 不是已知元素,但我在其他页面上使用过它

'mat-card' is not a known element, but I've used it on other pages

我正在开发一个使用 angular Marterial 的 Angular 10 (cordova) 项目。我创建了 loginregister 页面,它们使用 material 组件。但是添加新的 users 页面会导致 'mat-card' is not a known element 错误(即使我在 loginregister 页面中使用了它们)。删除 <mat-card> 元素允许应用程序正确编译 (ng build)。

users 页面的唯一区别是它在 dashboard 模块中延迟加载,其中 loginregisterdashboard 模块是app-routing.module.ts...

内所有延迟加载

为了全面了解我的应用程序的结构,我在下面列出了所有重要部分。如果我遗漏了什么,请告诉我。基本思想是我有一个 AppMaterialModule 导入到我所有的子模块中,这些子模块根据需要延迟加载。

所有页面导入 app-material.module.ts 其中包括:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MatCardModule } from '@angular/material/card';

const matModules = [
  MatCardModule 
];

@NgModule({
  declarations: [],
  imports: [
    CommonModule,
    ...matModules
  ],
  exports: [
    ...matModules
  ]
})
export class AppMaterialModule { }

app.module.ts 导入 AppMaterialModuleAppRoutingModule.

app-routing.module.ts 有以下代码:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthenticatedGuardService } from './shared/authenticated-guard.service';

const routes: Routes = [
  { path: 'login', loadChildren: () => import('./pages/landing/landing.module').then(m => m.LandingModule) },
  { path: 'register', loadChildren: () => import('./pages/register/register.module').then(m => m.RegisterModule) },
  { path: 'dashboard', canActivate: [AuthenticatedGuardService], loadChildren: () => import('./pages/dashboard/dashboard.module').then(m => m.DashboardModule) },
  { path: '', redirectTo: 'dashboard/users', pathMatch: 'full' },
  { path: '**', redirectTo: 'dashboard/users' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes, { useHash: true })],
  exports: [RouterModule]
})
export class AppRoutingModule { }

dashboard-routing.module.ts 具有以下内容:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { DashboardComponent } from './dashboard.component';

const routes: Routes = [
  { 
    path: '', 
    component: DashboardComponent,
    children: [
      { path: 'users', loadChildren: () => import('../users/users-routing.module').then(m => m.UsersRoutingModule) }
    ]
  },
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class DashboardRoutingModule { }

最后,users.module.ts有以下内容:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { UsersRoutingModule } from './users-routing.module';

import { UsersComponent } from './users.component';
import { AppMaterialModule } from '../../app-material.module';

@NgModule({
  declarations: [UsersComponent],
  imports: [
    CommonModule,
    AppMaterialModule,
    UsersRoutingModule,
  ]
})
export class UsersModule { }

如您所见,我将 AppMaterialModule 导入到每个模块中。我已经提到了一个使用类似设置的工作 Angular 9 项目 (Ionic),它看起来相同(除了必需的 Angular9 vs Angular10 更改),所以不确定我做错了什么:(

谁能看出我忽略了什么?

天哪

dashboard-routing.module.ts 中,我使用 import('../users/users-routing.module').then(m => m.UsersRoutingModule) 而不是 import('../users/users.module').then(m => m.UsersModule)

一个代价高昂的错误。