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

Angular报错NullInjectorError:CategoriaServiceList无提供者

解决Angular中NullInjectorError: No provider for CategoriaServiceList!错误

问题与报错信息

尝试从ASP.NET后端获取分类数据并在Angular组件中展示时,触发以下错误:

ERROR NullInjectorError: R3InjectorError(_AppModule)[CategoriaServiceList -> CategoriaServiceList]: 
  NullInjectorError: No provider for CategoriaServiceList!
    at NullInjector.get (core.mjs:5626:27)
    at R3Injector.get (core.mjs:6069:33)
    at R3Injector.get (core.mjs:6069:33)
    at ChainedInjector.get (core.mjs:15378:36)
    at lookupTokenUsingModuleInjector (core.mjs:4137:39)
    at getOrCreateInjectable (core.mjs:4185:12)
    at Module.ɵɵdirectiveInject (core.mjs:11996:19)
    at NodeInjectorFactory.CategoriasListComponent_Factory [as factory] (categorias-list.component.ts:10:37)
    at getNodeInjectable (core.mjs:4391:44)
    at createRootComponent (core.mjs:15644:35)

相关代码

服务代码(CategoriaServiceList)

export class CategoriaServiceList {

  url: string = 'https://localhost:7239/api/Categorias/listarcategorias';
  list: Categoria[] = [];
  constructor(private http: HttpClient) { }

  listCategory() {
    this.http.get(this.url)
    .subscribe( {
      next: res => {
        this.list = res as Categoria[];
      },
      error: error => {
        console.log(error)
      }
      
    });
  }

}

组件代码(CategoriasListComponent)

import { Component, OnInit } from '@angular/core';
import { Categoria } from '../models/categoria.model';
import { CategoriaServiceList } from '../services/categoria.service';

@Component({
  selector: 'app-categorias-list',
  templateUrl: './categorias-list.component.html',
  styleUrl: './categorias-list.component.css'
})
export class CategoriasListComponent implements OnInit {

  constructor(public service: CategoriaServiceList) { }


  ngOnInit(): void {
    this.service.listCategory();
  }

}

组件HTML代码

<table class="table table-hover">
            <thead>
              <tr>
                <th scope="col">Id</th>
                <th scope="col">Nome</th>
                <th scope="col">Url</th>
              </tr>
            </thead>
            <tbody>
              <tr *ngFor="let item of service.list">
                <td>{{ item.id }}</td>
                <td>{{ item.nome }}</td>
                <td>{{ item.url }}</td>
              </tr>
            </tbody>
  </table>

解决方案

这个错误的核心原因是Angular依赖注入系统找不到CategoriaServiceList的提供器,需要为服务注册提供器,有两种常用方式:

方式一:给服务添加@Injectable装饰器(推荐)

修改服务代码,添加@Injectable装饰器并指定providedIn: 'root',这样服务会被注册为全局单例:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Categoria } from '../models/categoria.model';

@Injectable({
  providedIn: 'root'
})
export class CategoriaServiceList {

  url: string = 'https://localhost:7239/api/Categorias/listarcategorias';
  list: Categoria[] = [];
  constructor(private http: HttpClient) { }

  listCategory() {
    this.http.get(this.url)
    .subscribe( {
      next: res => {
        this.list = res as Categoria[];
      },
      error: error => {
        console.log(error)
      }
      
    });
  }

}

方式二:在AppModule中注册服务

打开app.module.ts,在providers数组中添加CategoriaServiceList:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule } from '@angular/common/http'; // 确保已导入HttpClientModule
import { CategoriaServiceList } from './services/categoria.service';

import { AppComponent } from './app.component';
import { CategoriasListComponent } from './categorias-list/categorias-list.component';

@NgModule({
  declarations: [
    AppComponent,
    CategoriasListComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule // 必须导入,否则HttpClient无法使用
  ],
  providers: [CategoriaServiceList], // 注册服务
  bootstrap: [AppComponent]
})
export class AppModule { }

额外注意

确保HttpClientModule已经在AppModule的imports数组中导入,否则服务中的HttpClient也会触发依赖注入错误。

内容的提问来源于stack exchange,提问作者Breno Van Dall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:01:34