У меня есть служба, которая определяется следующим образом:
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.info('Called MyDataService constructor');
}
}
Насколько я понимаю, этот сервис должен быть одноэлементным на протяжении всего времени выполнения приложения.
Теперь, когда страница обновляется, она правильно регистрирует «Вызывается конструктор DataService».
К сожалению, когда я перехожу на другую страницу (новые маршруты с модулями отложенной загрузки), конструктор запускается снова и регистрирует «Вызывается конструктор DataService» при каждом изменении маршрута.
Я что-то пропустил?
Он должен (или может) быть синглтоном. Это зависит от того, как вы предоставляете услугу. Если в настоящее время это не так, вам следует взглянуть на свои модули и импорт и убедиться, что ваша служба также имеет набор createdInRoot: true.
@DeborahK Большое спасибо и вам. Он по-прежнему был предоставлен в другом компоненте. Теперь он работает, как ожидалось. Может быть, это будет полезно для кого-то еще в будущем, так как это может быть ловушкой. :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


createdIn: 'root' означает, что он будет создан только один раз, и один и тот же экземпляр будет предоставлен для всех запросов зависимостей. Если вы видите, что конструктор запускается более одного раза, значит, вы предоставляете его где-то еще. Ищите, где вы предоставляете его, как указано в: «root» не нужно указывать в списке предоставления. Найдите «provides: [» и посмотрите, что предоставляет MyDataService, и удалите его. Если вы используете VS Code, вы можете щелкнуть правой кнопкой мыши имя класса и выбрать «Найти все ссылки» и посмотреть, где он находится в предоставленном массиве.
Чтобы добавить к этому ответу... вы можете найти больше о синглтонах в документах здесь: angular.io/guide/singleton-services
Большое Вам спасибо. В этом была проблема. Он был случайно предоставлен и в другом компоненте. Я надеюсь, что это будет полезно для кого-то еще в будущем.
Зарегистрирована ли служба (определенная в массиве
providers) в каких-либо других компонентах или модулях?