Angular 2: как да споделяте услуга на ниво не-модул в различни маршрути

Имам услуга ServiceA, която има свои собствени състояния (променливи на екземпляри и т.н.) и в моя модул имам множество екземпляри на услуга ServiceA.

@Injectable()
export class ServiceA { 
  // It defines instance variables.
}

Тъй като трябва да имам множество екземпляри на ServiceA, не мога да го направя компонент на ниво модул.

В ComponentB създайте екземпляр на ServiceA и потенциално може да промени състоянието му:

@Component({
  providers = [ServiceA],
})
export class ComponentB {
  // changes the state of ServiceA.
}

Също така в HTML шаблона на ComponentB имам маршрут до ComponentC, който се нуждае от достъп до същия екземпляр ServiceA:

<a routerLink="/path_to_component_c"></a>

И ето дефиницията на ComponentC:

@Component({
  providers = [],
})
export class ComponentC {
  // accesses ServiceA.
}

Ако ServiceA беше компонент на ниво модул, няма да има проблеми при споделянето му между ComponentB и ComponentC, тъй като и двата са в един и същи модул. Въпреки това, тъй като ServiceA се инжектира директно в ComponentB, вече не мога да го направя. Имайте предвид, че всеки път ще бъде създаден само един ComponentC и ComponentC се създава след ComponentB.

Има ли начин за споделяне на данни между ComponentB и ComponentC? Благодаря!


person Lee7355512727    schedule 17.06.2017    source източник


Отговори (1)


Звучи така, сякаш искате да използвате ServiceA като фабрика, а не сингълтън. Това може да се постигне с фабричен доставчик.

Вижте също този отговор.

Има ли начин за споделяне на данни между ComponentB и ComponentC? Благодаря!

Има няколко начина. Услугата е една (да, можете да имате услуга за екземпляри от вашата фабрика!). Ако ComponentC е дъщерен на ComponentB, можете да използвате вход .

person Jefftopia    schedule 17.06.2017