You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动