Когда включать услуги внутри поставщиков?

Я только что закончил небольшой проект Angular 2 и сравнивая свою работу с кодом ответа модели, я заметил, что когда я смотрел на поставщиков в файле app.module.ts, репетитор включил только одну из двух созданных служб.

users.service.ts

    import { Component, Injectable } from '@angular/core';
import { CounterService } from './counter.service';

@Injectable()
export class UserService {
    activeUsers = ['Max', 'Anna'];
    inactiveUsers = ['Chris', 'Manu'];

    constructor(private counterService: CounterService) {}

setToActive(id: number) {
    this.activeUsers.push(this.inactiveUsers[id]);
    this.inactiveUsers.splice(id, 1);
    this.counterService.incrementInactiveToActive();
}

setToInactive(id: number) {
    this.inactiveUsers.push(this.activeUsers[id]);
    this.activeUsers.splice(id, 1);
    this.counterService.incrementActiveToInactive();
    }
 }

counter.service.ts (используется внутри службы пользователей через @Injectable)

export class CounterService {
activeToInactiveCounter = 0;
inactiveToActiveCounter = 0;

incrementActiveToInactive() {
    this.activeToInactiveCounter++;
    console.info('Active to Inactive Count:' + this.activeToInactiveCounter);
     }
  incrementInactiveToActive() {
  this.inactiveToActiveCounter++;
  console.info('Inactive to Active Count:' + this.inactiveToActiveCounter);
    }
}

Теперь, заглянув внутрь файла app.module.ts, он включает службу counter.service.ts, но не службу user.service.ts?

app.module.ts

providers: [CounterService]

Может кто-нибудь объяснить мне, почему он не включил оба? Большое спасибо.

РЕДАКТИРОВАТЬ - app.component.ts для справки:

import { Component } from '@angular/core';
import { UserService } from './users.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [UserService]
})
 export class AppComponent {
}

Куда вводится UserService?

Explosion Pills 21.05.2018 17:16

Это еще одна странность, я вижу только @Injectable() внутри users.service.ts, который используется для облегчения второй службы ..

Jan van Bergen 21.05.2018 17:20

Значит, UserService не вводится ни в какие компоненты?

Explosion Pills 21.05.2018 17:22

Он мог зарегистрировать поставщика услуг в свойстве Provider компонента, а не модуля.

Vikas 21.05.2018 17:23

Он может включить counter.service в app.module, потому что он хочет, чтобы это была глобальная одноэлементная служба для вашего приложения, и предоставил user.service напрямую в другом модуле или компоненте.

Narm 21.05.2018 17:24

@ExplosionPills Нет, это единственный экземпляр файла @Injectable' is inside of the users.service.ts. Единственное место, где упоминается UserService, - это когда он импортируется внутри файла app.component.ts.

Jan van Bergen 21.05.2018 17:24

Вы можете показать нам и app.component.ts? Хотя бы куда втыкает пользовательский сервис?

Explosion Pills 21.05.2018 17:38

Изменен @ExplosionPills

Jan van Bergen 21.05.2018 17:41
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
8
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете вставлять поставщиков в другие поставщики, компоненты и модули. Когда вы вводите поставщика на определенном уровне, он создается на этом уровне, поэтому поставщик, вводимый в модуль, создается один раз для всего модуля. Если он вводится в компонент, он создается один раз для каждого компонента.

В этом случае вы, вероятно, используете компонент приложения только один раз, поэтому в конечном итоге UserService в любом случае создается только один раз, но если вы использовали несколько AppComponent в своем приложении, у каждого из них была бы собственная пользовательская служба. Однако все они будут использовать один CounterService, поскольку он вводится на уровне модуля.

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