在 Angular 11 中,错误消息 "NullInjectorError: No provider for ApplicationRef" 是由于热模块替换 (Hot Module Replacement - HMR) 配置错误引起的。以下是一种可能的解决方法:
main.ts
文件。bootstrapModule
方法调用中传递了 ApplicationRef
作为第二个参数。import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
platformBrowserDynamic().bootstrapModule(AppModule, {
// 确保传递了 ApplicationRef 作为第二个参数
ngZone: 'noop',
// ...
})
.catch(err => console.error(err));
main.ts
文件中没有 bootstrapModule
的调用,可以尝试在 platformBrowserDynamic().bootstrapModule
方法中添加 ngZone: 'noop'
选项,如上所示。这样做将禁用 Angular 的默认 NgZone
设置,以解决 HMR 更新失败的问题。但是,这可能会导致其他潜在问题,所以请确保在测试和生产环境中进行彻底测试。
请注意,如果你使用的是 Angular CLI 创建的项目,并且已经在 angular.json
文件中配置了 HMR,那么你不需要手动更改 main.ts
文件。相反,你应该检查你的 angular.json
文件中的配置是否正确。