控制台出现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
相关产品推荐
相关产品推荐

