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

控制台出现NullInjectorError: No provider for Subscription!该如何解决?

NullInjectorError: No provider for Subscription 错误原因及解决办法

错误原因

  • Subscription是RxJS里用于管理订阅生命周期的普通类,不是Angular的可注入服务,不能通过构造函数依赖注入来获取实例。Angular的依赖注入机制会去寻找这个类的提供者,但你既没在模块也没在组件的providers数组里配置它,所以触发了"No provider"错误。
  • 你错误地把Subscription当作依赖注入的服务写在构造函数里,这违背了它的正确使用方式。

解决办法

不需要注入Subscription,而是在组件内部声明一个Subscription类型的变量,调用subscribe()方法时把返回的订阅对象赋值给这个变量,最后在ngOnDestroy钩子中执行取消订阅操作。

修改后的组件代码如下:

import { Component, OnDestroy, OnInit } from '@angular/core';
import { interval, Subscription } from 'rxjs';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css'],
})
export class HomeComponent implements OnInit, OnDestroy {
  private firstObsSubscription!: Subscription; // 声明变量

  constructor() {} // 移除构造函数中的注入

  ngOnInit() {
    // 将订阅结果赋值给变量
    this.firstObsSubscription = interval(1000).subscribe((count) => console.log(count));
  }

  ngOnDestroy() {
    this.firstObsSubscription.unsubscribe();
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:25:34