You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 18中mat-toolbar等元素识别失败及组件引导问题求助

问题描述

环境配置:

  • 系统:VoidLinux
  • Node.js:v18.19.1
  • pnpm:9.6(已在angular.json配置为包管理器)
  • Angular CLI:18.1.2
  • 学习资料:《Pro Angular 16》

运行pnpm ng serve -o时出现的错误:

  1. 'mat-toolbar' is not a known element
  2. 'mat-icon' is not a known element
  3. Can't bind to 'matBadge' since it isn't a known property of 'mat-icon'

尝试过的操作及后续问题:

  • 在app.module.ts的@NgModule中添加schemas: [CUSTOM_ELEMENTS_SHEMAS]或schemas: [NO_ERRORS_SCHEMAS],无效
  • 已在app.module.ts中导入MatToolbarModule、MatIconModule等Material模块
  • 修改main.ts同时调用bootstrapApplication和bootstrapModule后,出现NG0907: The _AppComponent component is not marked as standalone错误
解决方案

核心原因:Angular 18默认采用独立组件模式,而《Pro Angular 16》基于传统NgModule模式,版本不匹配导致冲突。以下两种方案二选一:

方案1:切换回NgModule模式(匹配教程)

  1. 修正main.ts,仅保留bootstrapModule调用:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));
  1. 确保AppComponent没有standalone: true装饰器:
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
  // 移除standalone: true(如果存在)
})
export class AppComponent { /* ... */ }
  1. 完善app.module.ts配置:
    • 必须导入BrowserAnimationsModule(Material组件依赖动画)
    • 补充MatBadgeModule(matBadge属于该模块,容易遗漏)
    • 移除schemas配置(会掩盖真实模块缺失问题)
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
// Material模块导入
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatIconModule } from '@angular/material/icon';
import { MatBadgeModule } from '@angular/material/badge';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatToolbarModule,
    MatIconModule,
    MatBadgeModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
  1. 清理缓存重启项目:
pnpm cache clean --force
pnpm install
pnpm ng serve -o

方案2:改用独立组件模式(适配Angular 18)

  1. 将AppComponent改为独立组件,直接导入所需模块:
import { Component } from '@angular/core';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatIconModule } from '@angular/material/icon';
import { MatBadgeModule } from '@angular/material/badge';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  standalone: true,
  imports: [
    MatToolbarModule,
    MatIconModule,
    MatBadgeModule
  ]
})
export class AppComponent { /* ... */ }
  1. 修正main.ts,仅使用bootstrapApplication并提供动画支持:
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
import { provideAnimations } from '@angular/platform-browser/animations';

bootstrapApplication(AppComponent, {
  providers: [provideAnimations()]
})
.catch(err => console.error(err));
  1. 可直接删除app.module.ts(独立组件无需NgModule)
  2. 清理缓存重启项目:
pnpm cache clean --force
pnpm install
pnpm ng serve -o

内容的提问来源于stack exchange,提问作者Aurélien Plazzotta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:49:59