为什么单例服务在每次路由更改时实例化,而不是在 Angular 6 中实例化一次?
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 constructor”改变。
我是不是漏掉了什么?
providedIn: 'root'表示只会实例化一次,所有依赖请求都会提供同一个实例。如果您不止一次看到构造函数 运行,那么您是在其他地方提供它。搜索您提供它的位置,因为 providedIn: 'root' 不需要在提供列表中列出。搜索 "provides : [" 并查看提供 MyDataService 的内容并将其删除。如果您使用的是 VS Code,您可以右键单击 class 名称并 select 查找所有引用并查看它在提供数组中的位置。
我有一个定义如下的服务:
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 constructor”改变。
我是不是漏掉了什么?
providedIn: 'root'表示只会实例化一次,所有依赖请求都会提供同一个实例。如果您不止一次看到构造函数 运行,那么您是在其他地方提供它。搜索您提供它的位置,因为 providedIn: 'root' 不需要在提供列表中列出。搜索 "provides : [" 并查看提供 MyDataService 的内容并将其删除。如果您使用的是 VS Code,您可以右键单击 class 名称并 select 查找所有引用并查看它在提供数组中的位置。