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

如何在其他项目中使用自定义Angular库服务?解决NG0203注入报错

解决Angular自定义库复用服务时的NG0203错误

在复用自定义Angular库中的服务时,遇到错误:ERROR Error: NG0203: inject() must be called from an injection context,相关代码示例如下:

库代码

库服务

import { HttpClient } from '@angular/common/http';
import { Injectable, Inject } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class ApiService {
  constructor(http: HttpClient) {}
  // ...其他方法
}

库模块

import { HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { ApiService } from './services/api-utils.service';
import { ApiComponent } from './api.component';
import { CommonModule } from '@angular/common';

@NgModule({
  declarations: [
    ApiComponent
  ],
  imports: [ 
    CommonModule ,
    HttpClientModule
  ],
  exports: [
    ApiComponent,
    HttpClientModule
  ],
  providers: [
    ApiService
  ]
})
export class ApiModule {}

应用代码

应用模块

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ApiModule } from 'api';

@NgModule({
  declarations: [
    // ...组件
  ],
  imports: [ 
    CommonModule,
    ApiModule,
    // ...其他模块
  ]
})
export class AppModule {}

解决方案

1. 移除重复的服务注册

你的ApiService已经通过@Injectable({ providedIn: 'root' })注册为根级单例服务,无需再在ApiModule的providers数组中声明。重复注册会导致注入上下文冲突,触发NG0203错误。修改后的ApiModule如下:

import { HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { ApiComponent } from './api.component';
import { CommonModule } from '@angular/common';

@NgModule({
  declarations: [
    ApiComponent
  ],
  imports: [ 
    CommonModule ,
    HttpClientModule
  ],
  exports: [
    ApiComponent,
    HttpClientModule
  ]
  // 移除providers数组中的ApiService
})
export class ApiModule {}

2. 检查库的TypeScript配置

确保库的tsconfig.lib.json中compilerOptions包含以下配置,保证装饰器元数据正确生成:

{
  "compilerOptions": {
    // ...其他配置
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  }
}

3. 清理缓存并重新构建

执行以下命令清理缓存,重新构建库和应用:

# 清理Angular缓存
ng clean

# 重新构建库(本地开发场景)
ng build your-library-name

# 重新构建应用
ng build

4. 确认库的安装方式

如果是本地开发复用库,确保通过npm link正确关联;如果是发布到npm的库,确认已正确安装到应用中,版本匹配。


内容的提问来源于stack exchange,提问作者Donri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:39:40