Angular 8使用ngx-toastr报错:No provider for ToastrService!求解决方案
解决Angular 8中ngx-toastr的NullInjectorError问题
嘿,这个错误我之前在项目里也踩过坑!核心原因就是Angular的依赖注入系统找不到ToastrService的提供者——说白了就是你没在模块里正确配置ngx-toastr的相关模块。下面是一步步的解决步骤:
1. 确认依赖已正确安装
首先确保你已经安装了ngx-toastr和它依赖的动画模块,打开终端运行:
npm install ngx-toastr @angular/animations --save
2. 在根模块(AppModule)中配置模块
打开app.module.ts,导入必要的动画模块和ToastrModule,并且调用forRoot()方法完成初始化:
import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; // 必须导入,若不需要动画可替换为NoopAnimationsModule import { NgModule } from '@angular/core'; import { ToastrModule } from 'ngx-toastr'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, BrowserAnimationsModule, ToastrModule.forRoot({ // 这里可以添加自定义配置,比如设置默认提示位置:positionClass: 'toast-top-center' }) ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
注意:
ToastrModule.forRoot()会自动注册ToastrService,所以不需要手动在providers数组里添加它。
3. 在组件中正确注入并使用服务
在你要使用提示的组件里,注入ToastrService就可以正常调用了:
import { Component } from '@angular/core'; import { ToastrService } from 'ngx-toastr'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { constructor(private toastr: ToastrService) {} showSuccessToast() { this.toastr.success('操作执行成功!', '成功提示'); } }
4. 懒加载模块中的配置(如果有)
如果你是在懒加载的模块里使用ngx-toastr,需要在该模块中导入ToastrModule.forChild():
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ToastrModule } from 'ngx-toastr'; @NgModule({ imports: [ CommonModule, ToastrModule.forChild() ], declarations: [] }) export class LazyLoadedModule { }
错误原因再解释一下
你遇到的NullInjectorError: No provider for ToastrService!,本质是Angular的DI容器找不到ToastrService的实例。只有通过ToastrModule.forRoot()(根模块)或forChild()(懒加载模块)注册后,DI容器才能找到并创建这个服务的实例供组件使用。
内容的提问来源于stack exchange,提问作者praveen sunagar




