Angular 8: использование нескольких экземпляров одного и того же сервиса - PullRequest
1 голос
/ 07 ноября 2019

Есть ли в Angular 8 изменение / обновление синтаксиса для нескольких экземпляров службы? Это не сработает ниже, так как они все еще используют одни и те же служебные данные,

Я видел здесь ответ, просто любопытно, если провайдеры Angular 8 используют другой синтаксис,

Использование несколькихэкземпляры одной и той же услуги

export class ProductComponent implements OnInit {

  @Input() propertyViewDto: PropertyViewDto2;
  carMessage: any;
  foodMessage: any;

  public carData: arcData;
  public foodData: FoodData;

  constructor
    (
        private readonly carService: ProductService,
        private readonly foodService: ProductService..

  ngOnInit() {

         this.carService.currentMessage.subscribe(currentMessage => {
           this.carMessage = currentMessage;
           this.carData= this.carMessage.value;
         })

         this.foodService.currentMessage.subscribe(currentMessage => {
           this.foodMessage = currentMessage;
           this.foodData= this.foodMessage.value; 
         })

Обслуживание продукта:

export class ProductService{

  private messageSource = new Subject();
  currentMessage = this.messageSource.asObservable();

  constructor() { }

  changeMessage(currentMessage) {
    this.messageSource.next(currentMessage);
  }
}

1 Ответ

1 голос
/ 07 ноября 2019

Это возможно, что вы хотите, но не очень описательный, хотя. Лучше было бы просто сделать ProductService вычитание и расширить его с помощью CarService и FoodService и использовать их в качестве провайдеров.

Если вы, однако, хотите, чтобы это было так, как вы просили, я полагаю, вы можете сделать это:

@Component({
  //...
  providers: [
    { provide: 'carService', useFactory: (/*deps*/) => new ProductService(), deps: [] },
    { provide: 'foodService', useFactory: (/*deps*/) => new ProductService(), deps: [] }
  ]
})
export class ProductComponent {
  constructor(
    @Inject('carService') private readonly carService: ProductService,
    @Inject('foodService') private readonly foodService: ProductService
  ) {}
}

Имейте в виду, что любой внедренный поставщик зависимостей из ProductService будет совместно использоваться этими двумя,Что вы можете решить при необходимости, расширив свою фабрику

Если ProductService не вводит никаких провайдеров (в чем я сомневаюсь), вы можете просто использовать new ProductService() в своем компоненте:

@Component({
  //...
  providers: []
})
export class ProductComponent implements OnInit {
  private readonly carService = new ProductService();
  private readonly foodService = new ProductService();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...