Как вызвать указанный c экземпляр службы из другой службы в Angular? - PullRequest
1 голос
/ 28 апреля 2020

Итак, у меня есть компонент «движения», который выполняет MotionService после нажатия кнопки с некоторым пользовательским вводом. Затем этому сервису необходимо передать данные в указанный c CaucusService экземпляр argumentsComponent (назовем это сервисом A) или экземпляр CaucusService B DiscussComponent в зависимости от входных данных. Однако, похоже, что до сих пор у меня есть новый экземпляр CaucusService в MotionService. Для argumentsComponent и DiscussComponent требуются разные экземпляры CaucusService, поэтому я предоставил его в каждом @ Component

По сути, мой MotionService должен передавать данные в A или B с учетом определенных пользовательских данных. Как я должен подходить к этой проблеме?

Ответы [ 3 ]

2 голосов
/ 28 апреля 2020
import { Injectable, Injector } from '@angular/core';
import { FirstService } from './first.service';

@Injectable({
    providedIn: 'root'
})

export class SecondService {

    static firstService = new FirstService();

    getFieldFromFirst() {
        const field = SortingService.fileService.getField();
        console.log(field);
    }
}

попробуйте таким образом

1 голос
/ 28 апреля 2020

Вы можете указать точный экземпляр Сервиса двумя способами:

Легко - сделать его одноэлементным сервисом

Простое добавление оператора providedIn: 'root' в объявление сервиса обеспечит только 1 экземпляр этой службы, что означает, что где бы вы ни использовали ее, это будет один и тот же экземпляр.

@Injectable({
    providedIn: 'root'
})
export class CaucusService {}

Hard - использовать токены впрыска

Это немного сложнее, но допускает несколько экземпляры для существования и ссылки там, где это необходимо. Информация о том, как это сделать, содержится в документации angular.

Общие рекомендации

Намного легче иметь дело с без гражданства services , чем для работы со службами, содержащими какое-либо состояние. Поэтому попробуйте передать состояние из компонентов, это также позволит вам гораздо проще тестировать сервисы.

0 голосов
/ 28 апреля 2020

Подход должен быть примерно таким: Создать экземпляр службы на уровне модуля для данных, которые вы хотите разделить между компонентами.

Создать отдельные службы для использования уровня компонента, которые будут содержать только дату компонента

Т.е. Службы A и B на уровне модулей для совместного использования службами уровня А1 и службами уровня B1, которые содержат данные, специфичные для компонента c.

...