Как да създадете Angular 6 singleton услуги в специфични функционални модули

Обобщете какво бих искал да постигна:

Искам да мога да използвам сингълтон услуга в 2 различни модула с функции с отложено зареждане. Тази услуга не трябва да е достъпна от други модули с функции, които се зареждат мързеливо/нетърпеливо. Така че по някакъв начин бих искал да обхвана услугата. Доколкото знам, в angular мога да регистрирам услугите глобално сред всички модули или в случай на мързеливо зареждане на модули, тези услуги ще имат нови екземпляри, ако не използвам provideIn: 'root' или класически стар forRoot логика.

Тук можете да намерите подготвен проект за github: https://github.com/Norby125/angular-singleton

Ако проверите структурата, технически имам общ модул, наречен shell, който предоставя услуги на всеки функционален модул, така че тези услуги са глобално достъпни за всички функционални модули. Имам 2 области с функции, наречени подприложение1 и подприложение2. В sub-app1 искам да имам един и същ екземпляр на всички основни модулни услуги, но искам да направя тези услуги недостъпни за sub-app2 модули. Важно е всички функции в областите да се зареждат отложено, като модулите feature1 и feature2.

Ще се радвам на всякакви насоки в това отношение.


person Norbert Papp    schedule 15.08.2018    source източник
comment
Моля, следвайте указанията за задаване на въпроси. stackoverflow.com/help/how-to-ask   -  person Reactgular    schedule 15.08.2018
comment
Малко коригирах един въпрос, надявам се сега да е по-добре   -  person Norbert Papp    schedule 15.08.2018


Отговори (2)


Когато предоставяте услугата в модула за функции, обхватът ще бъде ограничен до този представен модул.

За да скриете някои услуги от функционалните модули, можете да създадете друг модул, който да работи като основен, и да заредите функционалните модули като братя и сестри. нещо като това:

app.module
- main app
- feature module 1
- feature module 2 

И осигурете необходимите събития, за да позволите комуникацията между основния и функционалния модул, известен още като Subjects и BehaviorSubject

между другото, stackblitz е хубав и лесен начин за демонстриране на сценарии;) вижте този, който не е 100% свързан с вашия въпрос: https://stackblitz.com/edit/angular-services-di-playground

person hamilton.lima    schedule 15.08.2018
comment
Когато предоставяте услугата в модула за функции, обхватът ще бъде ограничен до този представен модул. Да, в случай на отложено зареждане на модули, така че когато имам множество отложено заредени модули и им предоставя услугата, това ще създаде множество екземпляри на услуга, които искам да избегна. Имам нужда от единична услуга сред множество лениво заредени функционални модули и да я скрия от всички други модули. - person Norbert Papp; 15.08.2018

Защо просто не предоставите услугата само в този функционален модул? Или ако наистина имате нужда от него само в 1 компонент в рамките на модула, накарайте компонента да има providers: []

person Taranjit Kang    schedule 15.08.2018
comment
не си ме разбрал Искам да имам един и същ екземпляр на конкретна услуга (споделена) между отложено заредени модули. - person Norbert Papp; 15.08.2018
comment
аххх това би било проблем :) може би можете да използвате BehaviorSubject в главния, за да запазите това, от което се нуждаете, достъпно за мързеливо заредените елементи, и да се абонирате за него в мързеливо заредените модули. Почти съм сигурен, че инжектираните услуги от главния няма да бъдат разпространени към мързеливите модули - person hamilton.lima; 15.08.2018