繁体   English   中英

为什么在每个路线更改时实例化单例服务,而在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构造函数 ”。

不幸的是,当我导航到另一个页面(带有延迟加载模块的新路由)时,构造函数再次运行,并且每次路由更改时都会记录“ Called DataService构造函数 ”。

我错过了什么?

ProvidedIn:'root'意味着它将仅被实例化一次,并且将向所有依赖项请求提供相同的实例。 如果看到构造函数运行不止一次,则可以在其他地方提供它。 按照providerIn搜索要提供它的位置:无需在提供列表中列出“ root”。 搜索“ provides:[”,然后查看提供MyDataService的内容并将其删除。 如果使用的是VS Code,则可以右键单击类名称,然后选择“找到所有引用”,然后查看它在Provides数组中的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM