我有这样定义的服务:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of, Subscription, combineLatest } from 'rxjs';
import { map, catchError, retry } from 'rxjs/operators';
@Injectable({
providedIn: 'root',
})
export class MyDataService {
constructor(private http: HttpClient) {
console.log('Called MyDataService constructor');
}
}
据我了解,此服务在应用程序的整个运行过程中应该是单例的。
现在,页面刷新时,它会正确记录“ 被称为DataService构造函数”。
不幸的是,当我导航到另一个页面(带有延迟加载模块的新路由)时,构造函数再次运行,并且每次路由更改时都会记录“ Called DataService构造函数”。
我错过了什么吗?
答案 0 :(得分:2)
providedIn:'root'意味着它将仅被实例化一次,并且将向所有依赖项请求提供相同的实例。如果看到构造函数运行不止一次,则可以在其他地方提供它。按照providerIn搜索要提供它的位置:无需在提供列表中列出“ root”。搜索“ provides:[”,然后查看提供MyDataService的内容并将其删除。如果您使用的是VS Code,则可以右键单击类名,然后选择“找到所有引用”,然后查看它在Provides数组中的位置。