Допустим, у меня есть Угловое 2, которая строится следующим образом:Совместное использование Угловое 2 службы между нижестоящими компонентами, которые не разделяют один и тот же родительский компонент
Другими словами, есть корень родительский компонент A
, который содержит экземпляры двух отдельных дочерних компонентов B
и C
.
Теперь скажите, что я хочу создать класс MyService
, который будет использоваться для каждого вертикального столбца компонентов для детей. В частности, я хочу иметь возможность вводить MyService
в компонент B
и компоненты конструктора C
, с угловым созданием двух экземпляров службы в целом (один для первого столбца дочерних компонентов и другой для второго столбца дочерних компонентов).
Один из способов сделать это, чтобы обернуть каждый столбец дочерних компонентов в промежуточном компоненте P
, а затем объявить MyService
в качестве поставщика в его @Component
декоратора с использованием providers: [MyService]
. Это гарантирует, что каждый экземпляр P
(и, следовательно, все его дочерние компоненты, а) получат свой собственный экземпляр MyService
:
Однако, я хотел бы избежать этого решения, потому что создание посредническую компонента обертку это похоже на много дополнительной плиты котла, а также требует реструктуризации, как компоненты размещаются в шаблоне компонента A
.
Есть ли простой способ достичь этого в угловом 2? Благодаря!
Спасибо! Я не знал о 'ng-container' ... попробуем это! –
На второй мысли ... Я до сих пор не вижу, как можно использовать 'ng-container' в этом случае. Например, что, если я хочу поделиться экземпляром службы между верхним левым компонентом 'B' и нижним правым компонентом' C'? Перетасовка шаблона шаблона для того, чтобы заставить инъекцию зависимостей работать так, как я хочу, это не звучит как очень гибкое решение для меня (то есть, если мне нужно изменить макет шаблона значительно позже?). Можно ли каким-то образом указать эти группировки, не требуя, чтобы они принадлежали к одному узлу DOM и/или 'ng-container'? –
Угловой не «гибкий», он самоуверенный. Если вы знаете, как это работает достаточно хорошо, вы можете эффективно разработать приложение и знать, чего ожидать. До тех пор, пока не возникнут проблемы с дизайном, они являются частью кривой обучения. – estus