'mat-card' 不是已知元素,但我在其他页面上使用过它
'mat-card' is not a known element, but I've used it on other pages
我正在开发一个使用 angular Marterial 的 Angular 10 (cordova) 项目。我创建了 login
和 register
页面,它们使用 material 组件。但是添加新的 users
页面会导致 'mat-card' is not a known element
错误(即使我在 login
和 register
页面中使用了它们)。删除 <mat-card>
元素允许应用程序正确编译 (ng build
)。
与 users
页面的唯一区别是它在 dashboard
模块中延迟加载,其中 login
、register
和 dashboard
模块是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
导入 AppMaterialModule
和 AppRoutingModule
.
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)
。
一个代价高昂的错误。
我正在开发一个使用 angular Marterial 的 Angular 10 (cordova) 项目。我创建了 login
和 register
页面,它们使用 material 组件。但是添加新的 users
页面会导致 'mat-card' is not a known element
错误(即使我在 login
和 register
页面中使用了它们)。删除 <mat-card>
元素允许应用程序正确编译 (ng build
)。
与 users
页面的唯一区别是它在 dashboard
模块中延迟加载,其中 login
、register
和 dashboard
模块是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
导入 AppMaterialModule
和 AppRoutingModule
.
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)
。
一个代价高昂的错误。