NullInjectorError: R3InjectorError(t)[j -> j -> j],这个报错为什么与加载顺序有关?

如题,我用angular13写了两个module,其中一个moduleA使用了service,但并没有用providers注入到组件中,另有一个moduleB,当我先加载moduleA,在加载moduleB时,一切正常,但如果先加载moduleB,再加载moduleA时,就会报ERROR NullInjectorError: R3InjectorError(t)[j -> j -> j]:
NullInjectorError: No provider for j!

component.ts:

import { Component, OnInit } from '@angular/core';
import { HeroService } from '../hero.service'
 
@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css'],
  providers: [HeroService] // 新增 providers: [HeroService]
})

service.ts

import { Injectable } from '@angular/core';
 
@Injectable()
export class HeroService {
 
  constructor() { }
 
  // 新增加setName方法
  setName(name:string):string{
    return `姓名:${name}`;
  }
} 

请问各位大佬这是为什么?,谢谢解答

阅读 2.2k
2 个回答

听你的描述你的service使用的providedIn是什么,你这个问得不清楚呀

https://stackblitz.com/

这上面把示例给出来,因为不清楚你的模块层次结构

新手完全没有必要手动管理service,所有service中的默认生效范围为root,而且angular有自己的摇树优化策略,完全不需要担心没有用到的service会被打包进来而影响打包体积的问题。

当然了,如果service的注入scope还没有概念的话,那么就更不应该尝试声明组件的providers了。所以删除组件中的这行代码你的错误便会消失。

providers: [HeroService] // 新增 providers: [HeroService]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏