[英]Why is a singleton service instantiated on every route change and not only once in Angular 6?
我有这样定义的服务:
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');
}
}
据我了解,此服务应在应用程序的整个运行过程中处于单一状态。
现在,页面刷新时,它会正确记录“ Called DataService构造函数 ”。
不幸的是,当我导航到另一个页面(带有延迟加载模块的新路由)时,构造函数再次运行,并且每次路由更改时都会记录“ Called DataService构造函数 ”。
我错过了什么?
ProvidedIn:'root'意味着它将仅被实例化一次,并且将向所有依赖项请求提供相同的实例。 如果看到构造函数运行不止一次,则可以在其他地方提供它。 按照providerIn搜索要提供它的位置:无需在提供列表中列出“ root”。 搜索“ provides:[”,然后查看提供MyDataService的内容并将其删除。 如果使用的是VS Code,则可以右键单击类名称,然后选择“找到所有引用”,然后查看它在Provides数组中的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.