Почему одноэлементная служба создается при каждом изменении маршрута, а не только один раз в 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.info('Called MyDataService constructor');
  }
}

Насколько я понимаю, этот сервис должен быть одноэлементным на протяжении всего времени выполнения приложения.

Теперь, когда страница обновляется, она правильно регистрирует «Вызывается конструктор DataService».

К сожалению, когда я перехожу на другую страницу (новые маршруты с модулями отложенной загрузки), конструктор запускается снова и регистрирует «Вызывается конструктор DataService» при каждом изменении маршрута.

Я что-то пропустил?

Зарегистрирована ли служба (определенная в массиве providers) в каких-либо других компонентах или модулях?

DeborahK 07.02.2019 23:41

Он должен (или может) быть синглтоном. Это зависит от того, как вы предоставляете услугу. Если в настоящее время это не так, вам следует взглянуть на свои модули и импорт и убедиться, что ваша служба также имеет набор createdInRoot: true.

MikeOne 07.02.2019 23:46

@DeborahK Большое спасибо и вам. Он по-прежнему был предоставлен в другом компоненте. Теперь он работает, как ожидалось. Может быть, это будет полезно для кого-то еще в будущем, так как это может быть ловушкой. :)

lampshade 07.02.2019 23:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
620
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

createdIn: 'root' означает, что он будет создан только один раз, и один и тот же экземпляр будет предоставлен для всех запросов зависимостей. Если вы видите, что конструктор запускается более одного раза, значит, вы предоставляете его где-то еще. Ищите, где вы предоставляете его, как указано в: «root» не нужно указывать в списке предоставления. Найдите «provides: [» и посмотрите, что предоставляет MyDataService, и удалите его. Если вы используете VS Code, вы можете щелкнуть правой кнопкой мыши имя класса и выбрать «Найти все ссылки» и посмотреть, где он находится в предоставленном массиве.

Чтобы добавить к этому ответу... вы можете найти больше о синглтонах в документах здесь: angular.io/guide/singleton-services

DeborahK 07.02.2019 23:47

Большое Вам спасибо. В этом была проблема. Он был случайно предоставлен и в другом компоненте. Я надеюсь, что это будет полезно для кого-то еще в будущем.

lampshade 07.02.2019 23:52

Другие вопросы по теме