Use directive in host of another Directive

Я хочу добавить директиву к элементу из другой директивы с помощью свойства host, но, похоже, нет способа ссылаться на другую директиву.

@Directive({
    selector: '[one]',
    host: { '[two]': '"some-value"' }
    // How can I reference DirectiveTwo here?
})
export class DirectiveOne { }

@Directive({
    selector: '[two]'
})
export class DirectiveTwo { }

При этом я получаю стандартную ошибку "Не удается связать с" двумя ", поскольку это не известное нативное свойство".

Как правильно ссылаться и использовать одну директиву из другой?

2 ответа

Решение

Директивы создаются Angular для селекторов, соответствующих только статически добавленному HTML (элемент, id, атрибут, класс, ...).
Нет никакого способа создать директивы, используя host параметр @Component() или же @Directive() декоратор. Также нет способа создавать директивы динамически, используя ViewContainerRef.createComponent() (бывший DynamicComponentLoader)

Поддерживается получение ссылки на другую директиву, которая была создана Angular из-за статически добавленного HTML в том же элементе.

Теперь этого можно достичь с помощьюhostDirectivesв Ангуляре v15+

      @Directive({
  selector: '...',
  hostDirectives: [Tooltip, Menu],
})
export class MenuWithTooltip { }

Подробности в документации Angular

Другие вопросы по тегам