Как стать автором
Обновить

Комментарии 10

Можно ли прикрепить директиву к динамически созданному компоненту?

Помнится, что с этим есть сложности...
И фича, которая помогла бы в этом, сейчас в roadmap ангуляра -> future

Можно почитать здесь:
https://angular.io/guide/roadmap#support-adding-directives-to-host-elements
https://github.com/angular/angular/issues/8785

Как вариант, создавать директиву в самом динамическом компоненте, например,
https://stackoverflow.com/questions/41298168/how-to-dynamically-add-a-directive

Или добавить обертку в дин. компоненте и там указать нужную директиву
Либо совсем упороться и сделать что-то подобное :D
https://stackblitz.com/edit/angular-mcbbub-eyraon (даже не стоит воспринимать всерьез)

Вроде люблю ангуляр, но мне кажется, что нам сильно не хватает нормальных компонентов высшего порядка.

Представим ситуацию когда нужно создать формбилдер (не тот утилитарный класс из коробки, нормальный билдер, чтоб верстка появилась). Во всех решения на ангуляре, что в интернете нужно заранее знать весь набор компонент, для составления гигантского нгСвича. А что если часть компонент в ядре билдера, как базовые компоненты, а другая может создавать отдельно в рамках спец фич. Хотелось бы просто передать компонент билдеру, а оный прикрепит formControl. Т.е. что-то типа:

```<ng-container *ngComponentOutlet="MyCustomControlComponent" [formControl]="control"></ng-contaner>```

Проблема реактивных форм в том, что компонента-то как раз и нет, есть лишь директива formControl, которая сама знает как её "вешаться" на базовые контролы HTML.


Если вы желаете перейти от ng-switch в сторону чего-то более расширяемого, вам надо каждый базовый блок оформить в виде, собственно, компонента. У которого все директивы "спрятаны" внутри, а снаружи только параметры принимаются через общий для всех подобных компонентов интерфейс. Вам не надо искать способ "прицепить" директиву к динамическому компоненту, это бесполезно — директива всё равно не знает как ей с компонентом работать.

Возможно сделать зависимость от компонента, когда он будет готов, получить его инстанс. forwardRef(() => YourComponentOrDirectiveOrService)

Класс статья - лаконично, просто, полезно.

Странно что пропустил данное обновление.

Думаю многие, как и я, ранее сталкивались с мыслью, почему фабрику не решать под капотом, и просто передавать компонент.

У метода скорее всего так и щас происходит, сверху навесили оверлоад + еще какие то решения с DI, и тд.

Честно говоря не понятно, чем отличается этот "кастомный" компонент от компонента с уже заданной формой, если всё равно, например, шаблон в примере не подставляется? Как я могу сделать кастомный компонент с произвольным шаблоном?

Где именно шаблон не подставляется?

Я имел в виду шаблон в виде строки, который можно в виде строки передать компоненту? Вот я хочу сделать компонент на двух разных шаблонах. Насколько это возможно? Я не хочу их отличать, просто у меня есть два разных шаблона.

Для этого в Ангуляре есть слоты или, на крайний случай, директивы. У компонентов всегда фиксированный шаблон, это то что отличает компонент от директивы.

Какое отношение ваш вопрос имеет к посту?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий