Когда включать услуги внутри провайдеров? - PullRequest
0 голосов
/ 21 мая 2018

Я только что закончил небольшой проект 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.log('Active to Inactive Count:' + this.activeToInactiveCounter);
     }
  incrementInactiveToActive() {
  this.inactiveToActiveCounter++;
  console.log('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 {
}

1 Ответ

0 голосов
/ 21 мая 2018

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

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

...