Да, существует способ доступа к родительскому компоненту с помощью модификатора разрешения @Host()
(подробнее см. официальная документация ). Основная идея c состоит в том, чтобы перемещаться по дереву компонентов с помощью Dependency Injection, чтобы найти ссылку на родительский элемент из дочернего элемента. Есть несколько хороших примеров здесь .
По умолчанию Angular ищет предоставленный экземпляр вверх вплоть до NullInjector
(самого высокого в иерархии). Если он не находит экземпляр, он генерирует исключение, если мы не используем @Optional
, в этом случае он возвращает null
. В вашем конкретном примере c мы используем Host()
, чтобы сообщить Angular, что нужно прекратить поиск с этим компонентом в качестве последней остановки при поиске. Нам не нужно его использовать, даже если мы опустим Host()
, он все равно будет работать.
В my-directive.directive.ts
файле:
constructor(@Host() private parent: SimpleComponent) {
// here we have an instance of SimpleComponent and we can access its properties except for the Input properties, those are still not set in constructor
}
Я создал простой stackblitz пример, демонстрирующий это.
EDIT : Вот пример , где мы находим экземпляр AppComponent
, который является родителем SimpleComponent
из директивы . Здесь мы не можем использовать Host()
, так как поиск остановится с директивой в качестве последней остановки (и AppComponent
выше в цепочке). Поэтому мы просто ничего не добавляем и получаем правильную ссылку.
Надеюсь, это поможет.